Python Django:如何使用ModelForm隐藏/覆盖默认标签?

Python Django:如何使用ModelForm隐藏/覆盖默认标签?,python,django,label,hide,modelform,Python,Django,Label,Hide,Modelform,我有以下内容,但为什么不隐藏图书评论标签?我发现错误“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 = mode

我有以下内容,但为什么不隐藏图书评论标签?我发现错误“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={''}),}  

exclude
属性采用iterable(通常是列表或元组)。但是
('book')
不是一个元组;由于Python语法的一个怪癖,
exclude=('book',)
,您需要添加逗号使其成为元组


出于这个原因,我通常只使用列表:
exclude=['book']
。(从语义上讲,在这里使用列表更有意义;我不知道Django的文档为什么鼓励使用元组。)

首先,将字段放在
Meta
类中。它需要在实际的
ModelForm
上运行。第二,这无论如何都不会有预期的结果。它只需在HTML中打印一个空标签元素

如果要完全删除标签,请手动检查字段,不显示标签:

{% for field in form %}
    {% if field.name != 'book_comment' %}
    {{ field.label }}
    {% endif %}
    {{ field }}
{% endfor %}

或者使用JavaScript将其删除。

要展开我的上述评论,表单没有文本字段。这就是TextField错误告诉您的。在没有有效的表单字段之前,担心标签是没有意义的

解决方案是使用forms.CharField,并使用Textarea小部件。您可以使用ModelFormWidgets选项,但在定义字段时设置小部件更简单

一旦有了一个有效的字段,您就已经知道如何设置空白标签:只需在字段定义中使用标签=“”

# 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',)

如果您使用的是Django 1.6+,则会在ModelForm的元类中添加许多新的覆盖,包括标签和
字段\u类


请参阅:

以仅覆盖您可以执行的标签

def __init__(self, *args, **kwargs): 
    super(ModelForm, self).__init__(*args, **kwargs)
    self.fields['my_field_name'].label = 'My New Title'

在下面找到了一个简单的解决方案:

基本上,只需添加标签字典并在表单元类中键入所需的新标签

class AuthorForm(ModelForm):
class Meta:
    model = Author
    fields = ('name', 'title', 'birth_date')
    labels = {
        'name': _('Writer'),
    }

可能不隐藏,但将标签更改为nothing?是否导入了forms.TextField?没有,我只从django.forms导入ModelForm,Textarea。当我尝试添加“、TextField”时,我得到一个导入错误…哎呀。没有forms.TextField。将forms.CharField与Textarea小部件一起使用。这让我抓狂,正确的语法是什么?有人知道如何简单地替换默认标签吗?我相信Django的文档建议使用元组,因为排除值不会改变,所以没有必要使用列表(它是可变的)。由于该可变属性,列表比元组大。a=('a',),b=['a'],然后使用uuuuuuuuuuuuuuuuf uuuuuuuuuuuuuuu方法并检查大小;-)我只希望标签是空的,我完全遵循文档,我能够覆盖默认标签…@markuz:我假设是这样,但我仍然认为这是错误的,因为元组不仅仅是不可变的列表。