• 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

  • 相关阅读:
    单例模式
    eclipse部署web项目至本地的tomcat但在webapps中找不到
    使用 google gson 转换Timestamp为JSON字符串
    前端JS对后台传递的timestamp的转换
    2018第15周总结
    Tomcat的最大并发数
    平台对接的另外一种模式
    系统间数据交换的5种方式
    Spring Boot条件注解
    Spring Data JPA 和MyBatis比较
  • 原文地址:https://www.cnblogs.com/gjx1212/p/13845623.html
Copyright © 2020-2023  润新知