如果id为null,Block.objects.get(id = block_id,1)默认获得“ 1”

时间:2018-08-06 12:42:12

标签: django

我想从数据库中检索块

 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

如何实现这种功能?

1 个答案:

答案 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_idNone0,空字符串或其他具有真实性False的值,它将用1代替。但这再次假设block_id有一个值。