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']
有人可以解释一下吗? :(
答案 0 :(得分:8)
您正在创建 ModelForm
子类。模型表单有可以使用模型,Meta
对象可以配置它。
这样的配置被分组到Meta
类以避免名称冲突;这样,您可以在表单中使用model
字段,而不会干扰配置。换句话说,通过使用class Meta:
,您可以使用 来使用嵌套命名空间来配置与模型相关的ModelForm
。
ModelForm
类主体本身的名称空间(在Meta
之外)是为表单字段本身以及表单方法保留的。您通常只需让ModelForm
从模型中生成这些字段,但原则上您可以添加字段。将字段放入类中的另一个原因是用您自己的版本完全替换任何生成的字段。
ModelForm
是常规Form
,可以自动生成某些字段。自动生成的字段取决于Meta
类的内容以及已经以声明方式定义的字段。基本上,ModelForm
只会生成表单中缺少的字段,换句话说,就是没有以声明方式定义的字段。以声明方式定义的字段保持原样,因此对
Meta
,widgets
,labels
或help_texts
等error_messages
属性所做的任何自定义都是忽略;这些仅适用于自动生成的字段。
由于ModelForm
期望在Meta
名称下设置配置,因此您不能将其删除并将model
和fields
放入ModelForm
类本身;这只是错误的地方。