如何在 django ModelForm CharField 之后添加“星 *”?

Posted

技术标签:

【中文标题】如何在 django ModelForm CharField 之后添加“星 *”?【英文标题】:How add a 'Star *' after a django ModelForm CharField? 【发布时间】:2012-08-27 10:38:53 【问题描述】:

我的 django ModelForm 中有一些必要的字段。如何在必填字段后添加红星 (*)?

【问题讨论】:

【参考方案1】:

我假设您希望这自动发生,所以这里有几种不同的方法之一:

% for field in form %
    <label for=" field.auto_id "> field.label_tag 
    % if field.field.required %
        <span class="required">*</span>
    % endif %
    </label>
% endfor %

然后您可以使用 CSS 设置星号样式。

或者,如果需要,您可以使用 CSS 添加星号:

<style type="text/css">
    span.required:after  content: '*'; 
</style>
% for field in form %
    <label for=" field.auto_id ">
    % if field.field.required %
        <span class="required"> field.label_tag </span>
    % else %
         field.label_tag 
    % endif %
    </label>
% endfor %

如果您还想对必填字段进行其他操作,这可能是一个更好的选择。

但是,如果您不会单独访问字段(例如使用 form.as_p ),那么您可以将属性添加到您的 ModelForm:

class FooForm(forms.ModelForm):
    required_css_class = 'required'

这会将所有必需的字段定义为具有“必需”类(因此,您可以使用我上面提到的 CSS 代码来添加星号(或您想要使用它执行的任何其他操作)。

【讨论】:

我在我的模板中使用 form.as_p 并且我无法以您编写的方式访问必填字段有没有办法在 ModelForm 中的某些字段之后自定义一个 html 块? @Kozet: form.as_p 如果您对它生成的 HTML 感到满意,那很好,但如果您想修改它,那么您需要为每个字段编写自己的表单 HTML个人。 @Kozet:根据您的情况编辑了我的答案。 @Kozet:如果答案对您有用,请将其标记为答案。 对这个出色答案的一个小改进:由于您手动写出标签标签,因此您可以在 span.required 中使用 field.label 而不是 field.label_tag 避免嵌套标签。【参考方案2】:

您也可以使用jQuery 来选择标签或附加到标签。

例如,如果你有这个引导表单

<form class="form-horizontal">
  <div class="form-group">
    <label for="inputEmail3" class="col-sm-2 control-label">Email</label>
    <div class="col-sm-10">
      <input type="email" class="form-control" id="inputEmail3" required="required">
    </div>
  </div>
  <div class="form-group">
    <label for="inputPassword3" class="col-sm-2 control-label">Password</label>
    <div class="col-sm-10">
      <input type="password" class="form-control" id="inputPassword3">
    </div>
  </div>
</form>

然后,如果您想将星号添加到必填字段。

$('input,textarea,select').filter('[required]').parent().parent().find("label").append("*");

您可能还想为必填字段标签指定一个类,以便将它们设为粗体或其他内容

$('input,textarea,select').filter('[required]:visible').parent().parent().find("label").addClass("required_label");

【讨论】:

以上是关于如何在 django ModelForm CharField 之后添加“星 *”?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中向 ModelForm 添加外键字段?

如何在 Modelform 的网格中呈现 Django CheckoxInput?

如何在 Django ModelForm 中获取实例

如何在 Django 中向 ModelForm 添加非模型字段?

如何使用 Modelform 和 jquery 在 django 中获取相互依赖的下拉菜单?

使用 Django,如何在模板中动态设置 ModelForm 字段值?