用“或”向类发送多个参数?

时间:2017-11-29 12:17:38

标签: python django forms

如果我们使用“或”发送参数给类创建了类的实例。

views.py

form_ = SchoolForm(request.POST or NONE)

form.py

class SchoolForm(forms.Form):
    name =          forms.CharField()
    location =      forms.CharField(required=False)

使用 form_ = SchoolForm(request.POST or NONE) 代替

form = SchoolForm()
if request.method == "POST":
    form = SchoolForm(request.POST)

3 个答案:

答案 0 :(得分:2)

or是一个运算符,它只计算其中一个操作数。 SchoolForm只能看到一个参数:request.POST的值,如果它是“真实的”(即bool(request.POST)评估为True),否则为NONE的值。

根据您的编辑,我认为您想要的是

form_ = SchoolForm(request.POST if request.method == "POST" else None)

(假设SchoolForm(None)SchoolForm()相同)。

答案 1 :(得分:0)

首先,NONE不是Python中的有效关键字/对象,它会引发解析错误,除非您已通过所述名称定义了变量。我认为你的意思是None

现在,为了回答你的问题,布尔表达式只返回它必须解析的最后一个值,如果or是第一个真值。

>>> 0 or 1
1
>>> 1 or 0
1
>>> 0 or False
False
>>> {} or None
None

答案 2 :(得分:0)

如果在其中找到某个值,

or运算符将首先选择变量,如果第一个变量属于None0""等,则

class Main: def __init__(self, x): self.x = x @property def show(self): print self.x b = {'first':'done'} c = {} obj = Main(b or c) obj.show b['second'] = 'done' # even after the class instantiate it will, # still update the value of class variable. obj.show 运算符将选择其他变量。

我还要指出的是,这些构造函数参数将通过引用调用,因此即使在声明之后在参数中进行的任何更改也会影响args的值(如果直接使用)。

{'first': 'done'}
{'second': 'done', 'first': 'done'}
$('input').on("change", function() {
  if ($('input[type="checkbox"].is(":checked")')) {
    alert("its checked");
  }
});