使用 Django ModelForm 时标记必填字段的标签

Posted

技术标签:

【中文标题】使用 Django ModelForm 时标记必填字段的标签【英文标题】:Mark the label of required fields when using Django ModelForm 【发布时间】:2018-12-24 11:16:09 【问题描述】:

当使用 Django 管理表单创建新对象或修改现有对象时,强制模型字段的 <label> 标记使用类属性 required 声明,例如

<div>
  <label class="required" for="id_title">Title:</label>
  <input class="vTextField" id="id_title" maxlength="255" name="title" type="text" required />
  <p class="help">A title for this tool</p>
</div>

但是,在使用 Django ModelForm 时情况并非如此。模板文件中以下代码生成的 html 代码

<table>
 toolForm.as_table 
</table>

&lt;label&gt; 标签没有任何类属性,这将有助于为所需字段的标签设置适当的样式:

<table>
<tr>
<th>
  <label for="id_title">Title:</label>
</th>
<td>
  <input id="id_title" maxlength="255" name="title" type="text" required />
  <br /><span class="helptext">A title for this tool</span>
</td>
</tr>
</table>

任何想法如何以有效的方式标记必填字段的标签?

【问题讨论】:

见this类似问题的想法 【参考方案1】:

按照 Ralf 对 xj9 here 描述的类似问题的提示,以下解决方案对我来说很好:

<table>
% for field in toolForm %
  <tr>
    <th>
        <label class="field-label% if field.field.required % field-required% endif %" for=" field.name "> field.label </label>
    </th>
    <td>
        % if field.errors %<span class="field-error"> field.errors </span>% endif %
         field <br/>
        % if field.help_text %<span class="field-helptext"> field.help_text|safe </span>% endif %
    </td>
  </tr>
% endfor %
</table>

在所需字段名称旁边添加'*' 符号的相应 CSS 可能如下:

.field-label 
    font-weight: normal;

.field-helptext 
    font-size: 12px;

.field-error 
    font-size: 14px;
    color: red;

.field-required 
    font-weight: bold;

.field-required:after 
    content: " *";

【讨论】:

以上是关于使用 Django ModelForm 时标记必填字段的标签的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django modelform 中的必填字段后添加 *?

将值传递给不是来自 Django ModelForm 中的输入的必填字段

Django ModelForm booleanfield 必填字段不起作用

模型表单中的 Django 必填字段

将属性添加到 django ModelForm 字段的 <input> 标记

将属性添加到 django ModelForm 字段的 <input> 标记