Django表单-模型表单
我正在学习Django表格。什么时候应该使用Django表单-模型表单,django,django-forms,Django,Django Forms,我正在学习Django表格。什么时候应该使用ModelForms而不是Forms?哪个更适合生产 我有点迷路了,那么,为什么我应该使用modelforms而不是仅仅使用表单呢 从概念上讲,ModelForm-派生的表单类旨在尽可能接近地复制底层模型的行为。我在这里使用“行为”的一般含义是:a)模型字段(即数据);和b)模型约束(即,其他一切,可能包括模型字段验证器或自定义业务逻辑或其他任何内容) 从实现的角度来看,ModelForm与Form具有类似的初始基础 然而,与表单不同,模型表单允许紧密
ModelForms
而不是Forms
?哪个更适合生产
我有点迷路了,那么,为什么我应该使用modelforms而不是仅仅使用表单呢
从概念上讲,ModelForm
-派生的表单类旨在尽可能接近地复制底层模型的行为。我在这里使用“行为”的一般含义是:a)模型字段(即数据);和b)模型约束(即,其他一切,可能包括模型字段验证器或自定义业务逻辑或其他任何内容)
从实现的角度来看,ModelForm
与Form
具有类似的初始基础
然而,与表单
不同,模型表单
允许紧密的模型
实例集成
ModelForm
还允许:
- 表单字段和模型字段之间的一对一字段类型映射。相反,如果使用的是
而不是表单
,则需要在模型表单
类中重新声明任何模型字段。这意味着您将复制应用程序逻辑。要说明这一点,请参见以下内容:表单
- 要从结果表单中删除的模型字段
- 同样容易创建
ModelForm
和Form
都是本地Django web框架组件。您选择使用ModelForm
还是Form
取决于特定项目的要求,以及个人偏好和采用的代码惯例
总之,如果可以通过使用ModelForm
实例轻松表示模型,请使用ModelForm
。如果没有,请使用自定义的表单
我有点迷路了,那么,为什么我应该使用modelforms而不是仅仅使用表单呢
从概念上讲,ModelForm
-派生的表单类旨在尽可能接近地复制底层模型的行为。我在这里使用“行为”的一般含义是:a)模型字段(即数据);和b)模型约束(即,其他一切,可能包括模型字段验证器或自定义业务逻辑或其他任何内容)
从实现的角度来看,ModelForm
与Form
具有类似的初始基础
然而,与表单
不同,模型表单
允许紧密的模型
实例集成
ModelForm
还允许:
- 表单字段和模型字段之间的一对一字段类型映射。相反,如果使用的是
而不是表单
,则需要在模型表单
类中重新声明任何模型字段。这意味着您将复制应用程序逻辑。要说明这一点,请参见以下内容:表单
- 要从结果表单中删除的模型字段
- 同样容易创建
ModelForm
和Form
都是本地Django web框架组件。您选择使用ModelForm
还是Form
取决于特定项目的要求,以及个人偏好和采用的代码惯例
总之,如果可以通过使用
ModelForm
实例轻松表示模型,请使用ModelForm
。如果没有,请使用自定义的表单
如果您的应用程序中有一个带有字段标题的示例书模型
models.py
Class Book(models.Model):
title = models.CharField()
要以一种形式表示它,您有两个选项
forms.py
from myapp.models import Book
class BookSimpleForm(forms.Form):
title = forms.CharField()
或
当您使用在简单表单中保存表单的数据时,您必须编写save方法的代码,因为表单未附加到模型。当您使用modelForm时,因为在Meta类中,您特定于告诉窗体何时运行save方法,请将发布的数据保存到modelForm实例的模型中
in views.py
from app.models import Book
from app.forms import BookSimpleForm, BookModelForm
第一选择
def method(request):
if request.method == 'POST':
book = Book(request.POST)
book.save()
第二种选择
def method(request):
if request.method == 'POST':
form = BookModelForm(request.POST)
if form.is_valid():
form.save()
在第一个方法request.Post中,有已发布的数据(标题),因此您可以创建一本书的实例并保存它。ModelForm具有save方法,以便通过
def method(request):
if request.method == 'POST':
book = Book(request.POST)
book.save()
def method(request):
if request.method == 'POST':
form = BookModelForm(request.POST)
if form.is_valid():
form.save()