Django——ModelForm(建立,参数,自定义错误验证)

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})
View Code

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一样

原文地址:https://www.cnblogs.com/x54256/p/7823015.html