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

the*_*eld 14 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 = 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={''}),}  
Run Code Online (Sandbox Code Playgroud)

Ala*_*air 18

为了扩展我上面的评论,没有表单的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',)
Run Code Online (Sandbox Code Playgroud)


Ala*_*ing 9

如果您正在使用Django 1.6+,则会在ModelForm的元类中添加一些新的覆盖,包括标签和field_classes.

请参阅:https://docs.djangoproject.com/en/1.10/topics/forms/modelforms/#overriding-the-default-fields


Tho*_*ner 7

要覆盖您可以执行的标签

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