4

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

当我使用它查看视图时,我只看到一个冒号 ( :),后跟文本字段:标签不见了。

根据以下文档ModelForm

另外,每个生成的表单域都有如下属性设置:

  • ...

  • 表单字段的标签设置为verbose_name模型字段的标签,第一个字符大写。

我犯了什么错误?

如果重要的话,我正在使用 Django 1.4.1。

4

2 回答 2

0

您必须将字段标签放在标签内<label>。所以:

<div>
    <label for="id_{{field.html_name}}">{{field.label}}:</label>
    {{ field }}
</div>
于 2013-06-24T20:21:55.020 回答
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 }}而不是遍历每个字段。

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

于 2013-07-02T19:20:08.693 回答