我的应用中有一个非常简单的ModelForm
,如下所示:
# ModelForm
class ProductForm(ModelForm):
class Meta:
model = MyModel
exclude = ['created', 'last_modified', 'serial_number']
# Model
class BaseModel(models.Model):
created = models.DateTimeField(auto_now_add=True, blank=True, null=True)
last_modified = models.DateTimeField(auto_now=True, blank=True, null=True)
class MyModel(BaseModel):
product = models.TextField(verbose_name='Product Name')
serial_number = models.TextField(verbose_name='Serial Number')
表格如下:
# Form
<form method="POST" action="{% url some_url %}">
{% csrf_token %}
{{ formset.management_form }}
{% for form in formset %}
{% for field in form %}
{% if field.errors %}
<div>{{ field.errors }}</div>
{% endif %}
<div>
{{ field.label_tag }}:
{{ field }}
</div>
{% endfor %}
{% endfor %}
<div class="actions">
<input class="button submit focus" type="submit" value="{% trans "Save" %}" />
</div>
</form>
当我使用此方法查看视图时,我只看到一个冒号(:
),后跟文本字段:标签已消失。
According to the documentation for ModelForm
:
此外,每个生成的表单字段都具有如下设置的属性:
...
表单字段的标签设置为模型字段的
verbose_name
,第一个字符大写。
我犯了什么错误?
如果重要的话,我正在使用Django 1.4.1。
答案 0 :(得分:0)
您必须将字段标签放在<label>
标记内。所以:
<div>
<label for="id_{{field.html_name}}">{{field.label}}:</label>
{{ field }}
</div>
答案 1 :(得分:0)
我设法找到的唯一解决方案仍然允许我将表单的每个行分开,执行以下操作:
<form method="POST" action="{% url some_url %}">
{% csrf_token %}
{{ formset.as_ul }}
<div class="actions">
<input class="button submit focus" type="submit" value="{% trans "Save" %}" />
</div>
</form>
...关键部分是{{ formset.as_ul }}
,而不是遍历每个字段。
至于为什么其他列出的解决方案(或文档中的解决方案)不起作用,我将一直感到困惑。