我想从数据库中检索块
block = Block.objects.get(id=block_id, 1)
如果block_id不存在,则将“ 1”作为默认值,
但是,它报告错误:
block = Block.objects.get(id=block_id, 1)
^
SyntaxError: positional argument follows keyword argument
如何实现这种功能?
答案 0 :(得分:2)
如果变量不存在,通常是坏建模。在这种情况下,最好先为其分配 some 值(例如None
或另一个 dummy值)。但是,我们可以使用Python的异常机制,例如:
try:
temp_block_id = block_id
except NameError:
temp_block_id = 1
block = Block.objects.get(id=temp_block_id)
但是如前所述,这是一个反模式。最好给变量赋值。
None
如果默认值为None
(因此它具有 值),我们可以使用例如三元运算符:
block = Block.objects.get(id=block_id if block_id is not None else 1)
这假定变量具有一个值。如果不是这种情况,它将引发NameError
。
False
大多数数据库不使用id=0
,因此我们可以通过编写以下内容使上面的内容更优雅:
block = Block.objects.get(id = block_id或1 )
如果block_id
是None
,0
,空字符串或其他具有真实性False
的值,它将用1
代替。但这再次假设block_id
有一个值。