为什么标签不出现在我的Django ModelForm中?

时间:2013-06-24 18:23:37

标签: django django-forms django-views

我的应用中有一个非常简单的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。

2 个答案:

答案 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 }},而不是遍历每个字段。

至于为什么其他列出的解决方案(或文档中的解决方案)不起作用,我将一直感到困惑。