一. ModelForm
ModelForm是根据Model来定制的Form
二. ModelForm的创建
from django import forms from app import models class MyModelForm(forms.ModelForm): class Meta: model = models.Book fields = "__all__" labels = { "title":"书名", "price":"价格" } widgets{ "password":forms.widgets.PasswordInput(attt={"class":"form-control"}), }
三. class Meta中常用的参数
model = models.Book 对应models中的类
fields = "__all__" 列出所有的字段
exclude = None 排除的字段
labels = None 提示信息
widgets = None 自定义插件
error_messages = None 自定义错误信息
四. ModelForm的使用
1. 创建modelform对象
form_obj = MyModelForm()
form_obj = MyModelForm(instance=obj) 如果需要对form进行有关操作就传进去一个实例对象
2. 编辑操作
form_obj = MyModelForm(request.POST,instance=obj)
form_obj.save() 这样,就会对实例对象进行操作
五. 对ModelForm显示的字段做出限制
1. 获取字段和字段对象
self.fields 获取有序字典,(字段,字段对象)
2. 对字段显示做出限制
self.fields["key"].choices 获取可供选择的迭代器列表,重新定义这个值,就可以对字段的显示做出限制
self.fields["key"].choices=[()] 这个值是列表中放着元组的数据
3. self.instance的操作
在实例化modelform对象的时候,instance=obj这个参数传的,这个obj是个类对象
在modelform中的Meta中,可以使用self.instance对字段的显示进行限制
六. modelformset的使用
1. 导入modelformset_factory模块
rom django.forms import modelformset_factory
2. 创建一个FormSet类
FormSet = modelformset_factory(models,form,extra=0) # 第一个参数是表的models,第二个参数是表的forms,extra是额外多几行
3. 实例化这个类
formset = FormSet(queryset=需要处理的queryset数据)
4. html渲染的时候
1. 给每个form都加上{{ formset.id }}
2. 在form表单中加{{ formsets.management_form }}
3. 展示字段
formset.字段 是带有input框的select
formset.instance.字段 拿到的是数据源,没有select框
原文地址:https://www.cnblogs.com/q767498226/p/10704706.html