这是我在处理一个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
语句、将返回值分配给本地变量并在if
语句中使用它们)。我想知道解决这种问题的Python方式。
all
是这里的最佳选择,但你在哪里使用了列表推导式?我只看到了一个简单的列表示例。 - rantanplanany
和all
返回布尔值。 - mgilson