在上节一中,我们 class Meta 中使用了一些元数据项,比如说 exclude、labels 以及 fields,当然还有些其他的选项,在 Django 官方网站 ModelForm 的定义如下所示
modelform_factory(model,form = ModelForm,fields = None,exclude = None,formfield_callback = None,widgets = None,localized_fields = None,labels = None,help_texts = None,error_messages = None,field_classes = None)
在这里给大家依次进行介绍这些 Meta 选项。
Creating a ModelForm without either the'fields'attribute or the'exclude'attribute is prohibited。
labels={ 'title':'标题',、 'price':'价格' }
help_texts={ "title":"书籍的名称" "price':"书籍价格" }
class Meta: model=UserInfo fields="__all__" widgets={'password':widgets.PasswordInput()}
field_calss={"title":forms.URLField}
def save(self, commit=True): if self.errors: raise ValueError( "The %s could not be %s because the data didn't validate." % ( self.instance._meta.object_name, 'created' if self.instance._state.adding else 'changed', ) ) if commit: # 除了保存当前Model实例,还会保存多对多关系数据 self.instance.save() self._save_m2m() else: # 将保存多对多数据方法赋值给save_m2m,save返回后可以手动调用 # saving of m2m data. self.save_m2m = self._save_m2m return self.instance save.alters_data = True通过源码不难理解它的实现逻辑,下面主要讲解一下 save 方法的基本使用,主要有三个场景。如下所示:
f = BookForm(request.POST) new_book = f.save()2) 从数据库中取出 models 的对象,然后通过 form 参数 instance 方法能够实例化该 form,这个主要用来查看具体的信息,如下所示:
a = Book.objects.get(id=1) f = BookForm(instance=a) f.save()3) 如果既有 Post 又有 instance,则以 Post 提交数据为主,这个主要用来修改具体的信息。如下所示:
a = Book.objects.get(id=1) f = BookForm(request.POST, instance=a) f.save()save 方法接受一个 commit 参数,默认为 True,可以实现 Model 实例的保存以及多对多关系数据的保存。如果在使用 save 方法时设置了 commit 为 False,则不会执行保存动作。此时,可以对返回的实例对象做一些操作后,再执行 save() 方法。
user=UserModelForm(request.Post) if user.is_valid(): user=user.save(commit=False) user.username=request.username user.save() return render(request,'index/user_add.html',locals())本节内容也至此完毕,在下一节《Django表单系统工作原理详述》,我们将分析一下 Django 表单系统的工作原理,由浅入深,各位小伙伴要做好心里准备哦!
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有