Django';s forms.Form vs forms.ModelForm
有谁能给我解释一下Django的Django';s forms.Form vs forms.ModelForm,django,django-forms,Django,Django Forms,有谁能给我解释一下Django的表单.Form&表单.ModelForm?相似之处在于,它们都使用小部件生成表单输入集,并且都验证浏览器发送的数据。不同之处在于ModelForm从指定的模型类获取其字段定义,并且还具有处理将基础模型保存到数据库的方法。从表单创建的表单。表单由您手动配置。对于不直接与模型交互的表单,最好使用这些。例如,联系人表单或时事通讯订阅表单,您可能不一定要与数据库交互 其中,作为从forms.ModelForm创建的表单,将自动创建,然后您可以稍后进行调整。最好的例子来自D
表单.Form
&表单.ModelForm
?相似之处在于,它们都使用小部件生成表单输入集,并且都验证浏览器发送的数据。不同之处在于ModelForm从指定的模型类获取其字段定义,并且还具有处理将基础模型保存到数据库的方法。从表单创建的表单。表单由您手动配置。对于不直接与模型交互的表单,最好使用这些。例如,联系人表单或时事通讯订阅表单,您可能不一定要与数据库交互
其中,作为从forms.ModelForm
创建的表单,将自动创建,然后您可以稍后进行调整。最好的例子来自Django网站上提供的优秀文档
表单。表单
:
文档:
使用表单创建的标准表单示例。表单:
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)
from django.forms import ModelForm
from . import models
# Create the form class.
class ArticleForm(ModelForm):
class Meta:
model = models.Article
forms.ModelForm
:
文档:
直接从文档中:
如果你的表格将用于
直接添加或编辑Django模型,
您可以使用ModelForm
来避免
复制模型描述
使用表单创建的模型表单示例。Modelform
:
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)
from django.forms import ModelForm
from . import models
# Create the form class.
class ArticleForm(ModelForm):
class Meta:
model = models.Article
此表单自动具有与创建它所依据的文章
模型相同的所有字段类型。以下是我扩展内置UserCreationForm myapp/forms.py的方法:
区别很简单,ModelForm用于创建模型的形式。
这意味着该模型旨在创建表的某种模式,您将在其中保存来自表单提交的数据,ModelForm仅创建模型的一种形式(来自表的模式)
表单是与数据库(模型)无关的常见表单。
# A simple form to display Subject and Message field
class ContactForm(forms.Form):
subject = forms.CharField(max_length=100)
message = forms.CharField(widget=forms.Textarea)
换句话说,,
如果你的应用程序中有一个模型,并且你想创建一个表单在该模型中输入数据(并通过它输入数据库),请使用forms.ModelForm
如果您想使用django创建一个表单,请使用form.form
但您也可以将其结合使用:
from django import forms
# A simple form to display Subject and Message field
class ContactForm(forms.ModelForm):
subject = forms.CharField(max_length=100)
message = forms.CharField(widget=forms.Textarea)
class Meta:
model = Contact #when you have this model
fields = [
'subject',
'message',
]
谢谢请问:我可以在不在管理区的普通视图上渲染ModelForm吗?当您传递request.POST以初始化表单时,可以在普通视图中呈现和处理表单。这就是它们的预期用途。管理表单是一个完全不同的野兽,超出了这个问题的范围。习惯于参考官方文件。它非常棒,几乎每次都能帮你省钱。