ModelForm(强大的数据验证,适中的数据库操作)
Form:
UserForm -> Form -> BaseForm
ModelForm:
UserModelForm -> ModelForm -> BaseModelForm -> BaseForm
添加信息
修改信息
1 from django import forms 2 from cmdb import models 3 4 class UserModelForm(forms.ModelForm): 5 class Meta: 6 model = models.User 7 fields = "__all__" 8 9 10 def add(request): 11 if request.method == "GET": 12 obj = UserModelForm() 13 return render(request,'mf.html',{'obj': obj}) 14 elif request.method == "POST": 15 obj = UserModelForm(request.POST) 16 if obj.is_valid(): 17 # print(obj.cleaned_data) 18 # models.User.objects.create(**obj.cleaned_data) 19 obj.save(commit=True) 20 """ 21 mobj = obj.save(commit=False) 22 mobj.save() 23 obj.save_m2m() 24 """ 25 print(obj.errors) 26 return render(request, 'mf.html', {'obj': obj}) 27 28 def edit(request,nid): 29 if request.method == "GET": 30 model_obj = models.User.objects.get(id=nid) 31 obj =UserModelForm(instance=model_obj) 32 return render(request, 'mf1.html', {'obj': obj,'nid': nid}) 33 elif request.method == 'POST': 34 model_obj = models.User.objects.get(id=nid) 35 36 obj = UserModelForm(request.POST, instance=model_obj) 37 if obj.is_valid(): 38 obj.save() 39 return render(request, 'mf1.html', {'obj': obj})
model+form ==> 验证+数据库操作
a. 因为用的字段是model里的,所以要在model里配置参数等
b.在modelform中写参数
class Meta: # 在modelform里的参数都是{}格式的,而且参数之间不加逗号
model, # 对应Model的
fields=None, # 字段
exclude=None, # 排除字段
labels=None, # 提示信息
help_texts=None, # 帮助提示信息
widgets=None, # 自定义插件
error_messages=None, # 自定义错误信息(整体错误信息from django.core.exceptions import NON_FIELD_ERRORS)
field_classes=None # 自定义字段类 (也可以自定义字段)
localized_fields=('birth_date',) # 本地化,如:根据不同时区显示数据
如:
数据库中
2016-12-27 04:10:57
setting中的配置
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = True
则显示:
2016-12-27 12:10:57
自定义验证:
3个属性(is_vaild,errors,cleaned_data)和3个钩子(自定义错误验证)和form一样