用于与 Django 模型紧密映射的表单。
1. 简单示例
# forms.pyfrom django.forms import ModelFormfrom myapp.models import Articleclass ArticleForm(ModelForm): # 创建模型表单类class Meta:model = Article # 关联模型fields = ['pub_date', 'headline', 'content', 'reporter']
或者
from django import formsfrom myapp.models import Articleclass ArticleForm(forms.ModelForm): # 创建模型表单类#...views.pyform = ArticleForm() # 创建新表单article = Article.objects.get(pk=1)form = ArticleForm(instance=article) # 修改已有数据
2. 自定义 ModelForm 字段
比如:Author 模型中 name 字段类型为CharField,也就是默认的 <input type="text">
,但想更改为 <textarea>
from django import forms # 引入 formsfrom myapp.models import Authorclass 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."),},}
