python - 如何在 get 方法中使用值列表?

标签 python django

我在 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/

相关文章:

python - Django Bash 完成不适用于 manage.py

python - 有效管理日益复杂的 Django URL View ? (网址.py)

python - 是否可以在浏览器中运行 pygame 或 pyglet ?

python - 属性错误:模块 'pandas.tseries.frequencies' 没有属性 'is_subperiod'

django - sqlite 数据库表在测试时被锁定

python - Django mod_wsgi : Exception occurred processing wsgi script

python - windows 10下安排python脚本加载数据到BigQuery

javascript - 来自多个 "active"客户端的 AppEngine 应用程序的可扩展轮询?

python - tensorflow.merge_all_summaries() 挂起

django - 序列化为 json 一对多嵌套(与多对一相反)