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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步