Django的forms.Form vs forms.ModelForm

任何人都可以向我解释Django的forms.Formforms.ModelForm吗?

forms.Form创build的表单由您手动configuration。 你最好使用这些不直接与模型交互的表单。 例如联系表单或新闻订阅表单,您可能不一定要与数据库进行交互。

forms.ModelForm创build的forms.ModelForm将自动创build,然后可以稍后调整。 最好的例子实际上来自于Django网站上提供的极好的文档。

forms.Formforms.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')