Vie*_*iet 70 django django-forms
任何人都可以向我解释Django forms.Form&的相似点和不同点forms.ModelForm吗?
jat*_*ism 102
创建的表单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)
Run Code Online (Sandbox Code Playgroud)
forms.ModelForm:
文档:从模型创建表单
直接从文档:
如果您的表单将用于直接添加或编辑Django模型,则可以使用a
ModelForm来避免重复模型描述.
使用forms.Modelform以下方法创建的模型表单示例:
from django.forms import ModelForm
from . import models
# Create the form class.
class ArticleForm(ModelForm):
class Meta:
model = models.Article
Run Code Online (Sandbox Code Playgroud)
此表单自动具有与Article创建模型相同的所有字段类型.
Ign*_*ams 13
相似之处在于它们都使用小部件生成表单输入集,并且都验证浏览器发送的数据.不同之处在于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')
Run Code Online (Sandbox Code Playgroud)
区别很简单,ModelForm 用于创建 Model 的形式。这意味着 Model 旨在创建表的某种模式,您将在其中保存表单提交中的数据,而ModelForm只是创建模型的表单(根据表的模式)
# This creates a form from model Article
class ArticleForm(ModelForm):
class Meta:
model = Article
fields = ['pub_date', 'headline', 'content', 'reporter']
Run Code Online (Sandbox Code Playgroud)
Form 是一个普通的表单,与你的数据库(model)无关。
# 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)
Run Code Online (Sandbox Code Playgroud)
换句话说,如果您的应用程序中有一个模型,并且您想创建一个表单来在该模型中输入数据(并通过它到数据库),请使用 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',
]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29943 次 |
| 最近记录: |