创建模型表单时为什么需要"类元"?

Utk*_*pta 2 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
Run Code Online (Sandbox Code Playgroud)

这段代码非常好用.但是,当我删除"class Meta:"时,它会抛出一个ValueError,说" ModelForm没有指定模型类 ".

from django import forms
from .models import NewsSignUp

class NewsSignUpForm(forms.ModelForm):
    model = NewsSignUp
    fields = ['email', 'first_name']
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 10

您正在创建一个ModelForm子类.模型表单必须具有可用的模型,并且Meta对象配置它.

像这样的配置被分组到Meta类中以避免名称冲突; 这样,您可以在表单中使用model 字段而不会干扰配置.换句话说,用class Meta:你习惯一个嵌套命名只是配置ModelForm相对于模型.

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

Model Forms文档中:

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

声明性定义的字段保持原样,因此任何定制到由Meta属性,例如widgets,labels,help_texts,或error_messages将被忽略; 这些仅适用于自动生成的字段.

由于ModelForm预计将配置下设置Meta的名称,你不能只是删除,并把modelfieldsModelForm类本身; 那只是错误的地方.