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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM