我在 Django 中有一个模板过滤器,它看起来很丑而且不太 Pythonic。有没有办法将所有的 get 请求合并到一个列表中?
@register.filter(name='is_supervisor')
def is_in_group(user):
group = Group.objects.get(name="security supervisor")
group1 = Group.objects.get(name="cage supervisor")
group2 = Group.objects.get(name="casino supervisor")
group3 = Group.objects.get(name="food bev supervisor")
return True if group or group1 or group2 or group3 in user.groups.all() else False
我尝试使用 Q
过滤器将它们链接在一起,但这不起作用。我也尝试过:
@register.filter(name='is_supervisor')
def is_in_group(user):
types = ["security supervisor", "cage supervisor",
"casino supervisor", "food bev supervisor"]
for name in types:
test1 = Group.objects.get(name=name)
return True if test1 in user.groups.all() else False
最佳答案
这不起作用的原因是因为 user.groups.all() 中的 group or group1 or group2 or group3
被解析为 (group) or (group1) or (group2)或(user.groups.all()中的group3)
,因此它将评估group
对象的真实性。通常,这些对象默认具有 True
真值,因此条件将始终成功。
但是,我们不需要使用所有这些查询,我们可以使用单个查询来检查这一点。确实:
@register.filter(name='is_supervisor')
def is_in_group(user):
return Group.objects.filter(
<b>user=user</b>,
<b>name__in</b>=[
'security supervisor',
'cage supervisor',
'casino supervisor',
'food bev supervisor'
]
).exists()
关于python - 如何在 get 方法中使用值列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58452908/