这是我在处理 Django 项目时遇到的一个问题。这是关于表单验证的。
在 Django 中,当您有一个提交的表单时,您可以调用is_valid()
相应的表单对象来触发验证并返回一个布尔值。所以,通常你的视图函数中有这样的代码:
if form.is_valid():
# code to save the form data
is_valid()
不仅验证表单数据,还向表单对象添加错误消息,之后可以显示给用户。
在一个页面上,我同时使用了两个表单,并且还希望仅当两个表单都包含有效数据时才保存数据。这意味着我必须is_valid()
在执行代码之前调用这两个表单来保存数据。最明显的方式:
if form1.is_valid() and form2.is_valid():
# ...
由于逻辑运算符的短路评估而无法工作。如果form1
无效,form2
则不会进行评估,并且会丢失其错误消息。
这只是一个例子。据我所知,在其他语言(即 Smalltalk)中没有and
/的贪婪替代品。or
我可以想象在不同的情况下会出现这个问题(不仅在 Python 中)。我能想到的解决方案都是笨拙的(嵌套if
s,将返回值分配给局部变量并在if
语句中使用它们)。我想知道解决此类问题的pythonic方法。