form,model,modelform的区别

一,三者的区别:

1,model 强大的数据库操作功能,弱小的数据验证功能
a,验证
full_clean ->字段正则判断-->clean方法(钩子)

2,form 强大的数据验证功能
is_valid() ->full_clean()->
->每个字段的正则,每个字段的方法 clean_字段名()
->_clean_form ->clean()钩子
->_post_clean(钩子)
----》
返回值is_valid()
cleaned_data
errors
3,modelform 强大是数据验证,适中的数据操作

二,补充

1,choice的补充:数据库更新后对应的网页文件也更新

form文件:

class UserForm(forms.Form):
    username=fields.CharField(label='用户名')
    email=fields.EmailField(label='邮箱')
    #前端用 obj.as_p,obj.as_table,obj.as_ul 一次性展示全部展示,后面的表示标签的嵌套
    
        user_type1=fields.ChoiceField(choices=model.UserTyep.objects.values_list('id','name'))
    user_type2=fields.ModelChoiceField(queryset=models.UserType.objects.all())
    def __init__(self,*args,**kwargs):
        super(UserForm,self).__init__(*args,**kwargs)
        self.fields['user_type1'].widget.choices=models.UserType.objects.all().value_list('id','name')

models文件:

class UserType(models.Model):
    name=models.CharField(max_length=10)
    def __str__(self):
    #用方法二时要添加的
        return self.name

 三,modelForm的强大功能

1,创建modelForm对象

class UserModelForm(forms.ModelForm):
    class Meta:
        #元信息
        model=model.User  #表名
        fields="__all__"  #字段名

2,自动保存的功能

#保存数据
def index(request):
    if request.method=="GET":
        obj=UserModelForm()
        return render(request,'mf.html',{'obj':obj})
    elif request.method=='POST':
        obj=UserModelForm(request.POST)
        if obj.is_valid():
            #保存添加的数据
            #models.User.objects.create(**obj.cleaned_data)    
            #obj.save()
            #ModelForm提供的save方法可以自动保存,同时可以自动保存多对多的第三张表的数据。
            #第三张表的数据想要单独保存也可以
            #obj.save(commit=True) 与下面的代码等效
            mobj=obj.save(commit=False)
            mobj.save_m2m()  保存对应的第三张表的数据
            
            return render(request,'mf.html',{'obj':obj})

3,更新数据

#更新数据
def edit_index(request,nid):
    if request.method=="GET":
        model_obj=models.User.objects.get(id=nid)
        obj=UserModelForm(instance=model_obj)
        return render(request,'mf1.html',{'obj':obj,'nid':nid})
    elif request.method=='POST':
        model_obj=models.User.objects.get(id=nid)
        obj=UserModelForm(request.POST,instance=model_obj)
        if obj.is_valid():
            #保存添加的数据
            #models.User.objects.create(**obj.cleaned_data)    
            obj.save
            #ModelForm提供的save方法可以自动保存,同时可以自动保存多对多的第三张表的数据。
            #第三张表的数据想要单独保存也可以
        return render(request,'mf1.html',{'obj':obj})

资源来源:
model:           http://www.cnblogs.com/wupeiqi/articles/6216618.html
form :             http://www.cnblogs.com/wupeiqi/articles/6144178.html
modelform:            http://www.cnblogs.com/wupeiqi/articles/6229414.html

原文地址:https://www.cnblogs.com/gjx1212/p/13845623.html