为什么"类Meta"在创建模型表单时是否有必要?

时间:2016-09-13 18:01:22

标签: python django django-models django-forms

from django import forms
from .models import NewsSignUp

class NewsSignUpForm(forms.ModelForm):
    class Meta:
        model = NewsSignUp
        fields = ['email', 'first_name']
here

此代码完美无缺。但是,当我删除"类Meta:" 时,它会抛出一个ValueError,说" ModelForm没有指定模型类。& #34;

from django import forms
from .models import NewsSignUp

class NewsSignUpForm(forms.ModelForm):
    model = NewsSignUp
    fields = ['email', 'first_name']

有人可以解释一下吗? :(

1 个答案:

答案 0 :(得分:8)

您正在创建 ModelForm 子类。模型表单可以使用模型,Meta对象可以配置它。

这样的配置被分组到Meta类以避免名称冲突;这样,您可以在表单中使用model 字段,而不会干扰配置。换句话说,通过使用class Meta:,您可以使用 来使用嵌套命名空间来配置与模型相关的ModelForm

ModelForm类主体本身的名称空间(在Meta之外)是为表单字段本身以及表单方法保留的。您通常只需让ModelForm从模型中生成这些字段,但原则上您可以添加字段。将字段放入类中的另一个原因是用您自己的版本完全替换任何生成的字段。

来自Model Forms documentation

  

ModelForm是常规Form,可以自动生成某些字段。自动生成的字段取决于Meta类的内容以及已经以声明方式定义的字段。基本上,ModelForm只会生成表单中缺少的字段,换句话说,就是没有以声明方式定义的字段。

     

以声明方式定义的字段保持原样,因此对Metawidgetslabelshelp_textserror_messages属性所做的任何自定义都是忽略;这些仅适用于自动生成的字段。

由于ModelForm期望在Meta名称下设置配置,因此您不能将其删除并将modelfields放入ModelForm类本身;这只是错误的地方。