用于与 Django 模型紧密映射的表单。

1. 简单示例

  1. # forms.py
  2. from django.forms import ModelForm
  3. from myapp.models import Article
  4. class ArticleForm(ModelForm): # 创建模型表单类
  5. class Meta:
  6. model = Article # 关联模型
  7. fields = ['pub_date', 'headline', 'content', 'reporter']

或者

  1. from django import forms
  2. from myapp.models import Article
  3. class ArticleForm(forms.ModelForm): # 创建模型表单类
  4. #...
  5. views.py
  6. form = ArticleForm() # 创建新表单
  7. article = Article.objects.get(pk=1)
  8. form = ArticleForm(instance=article) # 修改已有数据

2. 自定义 ModelForm 字段

比如:Author 模型中 name 字段类型为CharField,也就是默认的 <input type="text">
,但想更改为 <textarea>

  1. from django import forms # 引入 forms
  2. from myapp.models import Author
  3. class AuthorForm(forms.ModelForm): # forms.ModelForm 子类
  4. class Meta:
  5. model = Author # 关联模型
  6. fields = ('name', 'title', 'venuetypes') # 表单字段(顺序)
  7. widgets = { # 自定义控件和属性(参考表单 Widgets)
  8. 'name': forms.Textarea(attrs={'cols': 80, 'rows': 20}),
  9. 'venuetypes' : forms.Select(
  10. queryset=Venuetypes.objects.all,
  11. attrs={'class' : 'venue_type_select'}
  12. )
  13. }
  14. labels = { # 自定义标签名称
  15. 'name': _('Writer'),
  16. }
  17. help_texts = { # 自定义帮助文字(可以在 Model 的字段中设置)
  18. 'name': _('Some useful help text.'),
  19. }
  20. error_messages = { # 自定义错误信息
  21. 'name': {
  22. 'max_length': _("This writer's name is too long."),
  23. },
  24. }