Django:is_valid 和 form_valid 之间的区别
Posted
技术标签:
【中文标题】Django:is_valid 和 form_valid 之间的区别【英文标题】:Django: difference between is_valid and form_valid 【发布时间】:2016-03-27 07:50:31 【问题描述】:我创建了一个forms.ModelForm
表单。在“视图”方面,我创建了一个 generic.UpdateView
视图。
在这 2 个不同的类中,我的一侧是 is_valid()
,另一侧是 form_valid()
。
class ProfileForm(FormForceLocalizedDateFields):
class Meta:
model = Personne
fields = ('sexe', 'statut', 'est_fumeur',
'est_physique', 'date_naissance')
exclude = ('user', 'est_physique')
# blabla fields declaration
def is_valid(self):
pass
和编辑视图:
class EditView(LoginRequiredMixin, generic.UpdateView):
model = Personne
template_name = 'my_home/profile/edit.html'
form_class = ProfileForm
success_url = reverse_lazy('my_home_index')
# blabla get_initial() and get_object() and get_context_data()
def form_valid(self, form):
# username = form.cleaned_data['username']
# Hack: redirect on same URL:
# - if user refreshes, no form re-send
# - if user goes back, no form re-send too, classical refresh
site_web = u"0://1".format(
self.request.scheme, self.request.META['HTTP_HOST']
)
return HttpResponseRedirect(u'01'.format(
site_web, self.request.META['PATH_INFO']
))
我的表单显示了 3 个不同模型的 3 个字段:
User
,
Person
有一个 User 的外键
Picture
与 Person
有一个外键
我应该在哪里创建更新这些字段的代码,为什么?
generic.UpdateView
应该在更新字段时帮助我们,但似乎当您有不属于您编辑的model
的字段时,您必须编写 all 的“更新”手。
【问题讨论】:
【参考方案1】:is_valid
表面上只是告诉你表格是否有效,这是它应该做的唯一工作..
来自source code:
def is_valid(self):
"""
Returns True if the form has no errors. Otherwise, False. If errors are
being ignored, returns False.
"""
return self.is_bound and not self.errors
在这之下,它还做了什么(来自docs)
运行验证并返回指定数据是否有效的布尔值:
运行验证是因为errors
是一个在尚未调用验证时将调用full_clean
的属性。
@property
def errors(self):
"Returns an ErrorDict for the data provided for the form"
if self._errors is None:
self.full_clean()
return self._errors
我应该在哪里创建更新这些字段的代码,为什么?
在form_valid
方法中,因为此时您已发现您的验证已验证更新模型是安全的。
【讨论】:
@OlivierPons - 别担心,尽情享受吧! @OlivierPons - 它有点棘手,可能需要一个新问题才能得到答案......我会考虑在你将文件保存在某个地方之前验证文件,假设你正在使用临时文件按照 django 默认上传存储 我在你回答的时候添加了我的问题..:^D
我们去 >>
***.com/questions/34397856/…以上是关于Django:is_valid 和 form_valid 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
ajax 形式 is_valid 返回 false (django)