我有以下内容,但为什么这不会隐藏书评的标签?我得到错误'textfield'没有定义:
from django.db import models
from django.forms import ModelForm, Textarea
class Booklog(models.Model):
Author = models.ForeignKey(Author)
Book_comment = models.TextField()
Bookcomment_date = models.DateTimeField(auto_now=True)
class BooklogForm(ModelForm):
#book_comment = TextField(label='')
class Meta:
model = Booklog
exclude = ('Author')
widgets = {'book_entry': Textarea(attrs={'cols': 45, 'rows': 5}, label={''}),}
答案 0 :(得分:17)
要扩展我上面的评论,表单上没有TextField。这就是TextField错误告诉你的内容。在您拥有有效的表单字段之前,没有必要担心标签。
解决方案是使用forms.CharField,使用Textarea小部件。您可以使用模型表单窗口小部件选项,但在定义字段时设置窗口小部件更简单。
获得有效字段后,您已经知道如何设置空白标签:只需在字段定义中使用label =''。
# I prefer to importing django.forms
# but import the fields etc individually
# if you prefer
from django import forms
class BooklogForm(forms.ModelForm):
book_comment = forms.CharField(widget=forms.Textarea, label='')
class Meta:
model = Booklog
exclude = ('Author',)
答案 1 :(得分:9)
如果您正在使用Django 1.6+,则会在ModelForm的元类中添加一些新的覆盖,包括标签和field_classes
。
请参阅:https://docs.djangoproject.com/en/1.10/topics/forms/modelforms/#overriding-the-default-fields
答案 2 :(得分:5)
仅覆盖您可以执行的标签
def __init__(self, *args, **kwargs):
super(ModelForm, self).__init__(*args, **kwargs)
self.fields['my_field_name'].label = 'My New Title'
答案 3 :(得分:1)
exclude
属性采用可迭代(通常是列表或元组)。但是('book')
不是一个元组;由于Python语法的怪癖,你需要附加一个逗号来使其成为一个元组:exclude = ('book',)
。
出于这个原因,我通常只使用列表:exclude = ['book']
。 (从语义上讲,无论如何在这里使用列表更有意义;我不确定为什么Django的文档会鼓励使用元组。)
答案 4 :(得分:0)
首先,您将字段放在Meta
类中。它需要继续实际ModelForm
。其次,无论如何都不会产生预期的结果。它只会在HTML中打印一个空的标签元素。
如果要完全删除标签,请手动检查字段,不要显示标签:
{% for field in form %}
{% if field.name != 'book_comment' %}
{{ field.label }}
{% endif %}
{{ field }}
{% endfor %}
或使用JavaScript将其删除。
答案 5 :(得分:0)
在下面找到了一个简单的解决方案: https://docs.djangoproject.com/en/1.10/topics/forms/modelforms/#overriding-the-default-fields
基本上只是添加标签字典,然后在表单元类中键入所需的新标签。
class AuthorForm(ModelForm):
class Meta:
model = Author
fields = ('name', 'title', 'birth_date')
labels = {
'name': _('Writer'),
}