有人可以向我解释Django forms.Form
&的异同forms.ModelForm
吗?
Answers:
forms.Form
由您创建的表单是由您手动配置的。您最好将它们用于不直接与模型交互的表单。例如,联系表格或新闻通讯订阅表格,您可能不一定要与数据库进行交互。
从何处创建的表单forms.ModelForm
将自动创建,然后您可以对其进行调整。最好的例子确实来自Django网站上提供的精湛文档。
forms.Form
:
文档:表单对象
使用forms.Form
以下命令创建的普通表单的示例:
from django import forms
class ContactForm(forms.Form):
subject = forms.CharField(max_length=100)
message = forms.CharField()
sender = forms.EmailField()
cc_myself = forms.BooleanField(required=False)
forms.ModelForm
:
文档:从模型创建表单
直接从文档开始:
如果您的表单将用于直接添加或编辑Django模型,则可以使用
ModelForm
来避免重复模型描述。
使用创建的模型表单的示例forms.Modelform
:
from django.forms import ModelForm
from . import models
# Create the form class.
class ArticleForm(ModelForm):
class Meta:
model = models.Article
此表单自动具有Article
与其创建时所用模型相同的所有字段类型。
相似之处在于它们都使用小部件生成了一组表单输入,并且都验证了浏览器发送的数据。区别在于ModelForm从指定的模型类获取其字段定义,并且还具有处理将基础模型保存到数据库的方法。
这是我扩展内置UserCreationForm myapp / forms.py的方法:
from django import forms
from django.contrib.auth.forms import UserCreationForm
class RegisterForm(UserCreationForm):
first_name = forms.CharField(max_length=30)
last_name = forms.CharField(max_length=30)
email = forms.CharField(max_length=75)
class Meta(UserCreationForm.Meta):
fields = ('username','first_name','last_name', 'email')