2013-06-24 34 views
4

我有一个在我的应用程序非常简单ModelForm,看起来像这样:为什么标签不出现在我的Django 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

这看起来没错。当你做'{{field.label}}'时会发生什么? – karthikr

+0

什么都没有;相同的结果。 – NT3RP

+0

什么是StoreTheme?那是另一类吗? –

回答

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

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

0

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

<div> 
    <label for="id_{{field.html_name}}">{{field.label}}:</label> 
    {{ field }} 
</div> 
+0

这两个[与文档相矛盾](https://docs.djangoproject.com/en/1.4/topics/forms/modelforms/#using-the-formset-in-the-template),也不起作用。我只是得到一堆这样的标签:'' – NT3RP

+0

我有一个错字,(现在更正了),这对我很有用。 你是对的:它与文档是不同的实现,(虽然我不会说它是合同的)。 – Basti

+1

即使纠正错字(例如缺少引号),它仍然不适用于我。更准确地说,你所建议的不应该是必要的(因为'label_tag'应该可以工作)。 – NT3RP