用于与 Django 模型紧密映射的表单。
1. 简单示例
# forms.py
from django.forms import ModelForm
from myapp.models import Article
class ArticleForm(ModelForm): # 创建模型表单类
class Meta:
model = Article # 关联模型
fields = ['pub_date', 'headline', 'content', 'reporter']
或者
from django import forms
from myapp.models import Article
class ArticleForm(forms.ModelForm): # 创建模型表单类
#...
views.py
form = ArticleForm() # 创建新表单
article = Article.objects.get(pk=1)
form = ArticleForm(instance=article) # 修改已有数据
2. 自定义 ModelForm 字段
比如:Author 模型中 name 字段类型为CharField,也就是默认的 <input type="text">
,但想更改为 <textarea>
from django import forms # 引入 forms
from myapp.models import Author
class AuthorForm(forms.ModelForm): # forms.ModelForm 子类
class Meta:
model = Author # 关联模型
fields = ('name', 'title', 'venuetypes') # 表单字段(顺序)
widgets = { # 自定义控件和属性(参考表单 Widgets)
'name': forms.Textarea(attrs={'cols': 80, 'rows': 20}),
'venuetypes' : forms.Select(
queryset=Venuetypes.objects.all,
attrs={'class' : 'venue_type_select'}
)
}
labels = { # 自定义标签名称
'name': _('Writer'),
}
help_texts = { # 自定义帮助文字(可以在 Model 的字段中设置)
'name': _('Some useful help text.'),
}
error_messages = { # 自定义错误信息
'name': {
'max_length': _("This writer's name is too long."),
},
}