Django的forms.Form vs forms.ModelForm
任何人都可以向我解释Django的forms.Form
& forms.ModelForm
吗?
从forms.Form
创build的表单由您手动configuration。 你最好使用这些不直接与模型交互的表单。 例如联系表单或新闻订阅表单,您可能不一定要与数据库进行交互。
从forms.ModelForm
创build的forms.ModelForm
将自动创build,然后可以稍后调整。 最好的例子实际上来自于Django网站上提供的极好的文档。
forms.Form
: forms.Form
:
文档: 表单对象
使用forms.Form
创build的常规窗体的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
:
文档: 从模型创build表单
直接从文档:
如果您的表单将用于直接添加或编辑Django模型,则可以使用
ModelForm
来避免重复您的模型描述。
使用forms.Modelform
创build的模型表单forms.Modelform
:
from django.forms import ModelForm from . import models # Create the form class. class ArticleForm(ModelForm): class Meta: model = models.Article
该表单自动具有与从其创build的Article
模型相同的字段types。
它们的相似之处在于它们都使用小部件生成一组表单input,并validation浏览器发送的数据。 不同之处在于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')