Django "OR" 像查询集中的语句?
Django "OR" like statement in Queryset?
只是在 Django 上有一个简单的语法问题,
想象以下查询集:
queryset = Requests.objects.get_queryset().filter(
status='Pending',
up_rank__gte=config.REQ_RANK - 10,
down_rank__gte=config.REQ_RANK - 10
)
有没有什么方法可以像这样设置我的查询:
up_vote__gte=config.REQ_RANK - 10 OR down_vote__gte=config.REQ_RANK -
10 ?! (See pseudo OR)
因为我想同时过滤 up_rank 和 down_rank __gte。我知道的唯一方法是查询链,但对我来说这似乎效率不高,除了查询链语句还有其他方法还是我只是胡说八道链就可以了?
提前致谢
是的,您可以将条件包装在 Q
objects [Django-doc] 中,并使用按位或运算符 (|
),这将生成一个 Q
对象,即析取:
from django.db.models import <b>Q</b>
queryset = Requests.objects.get_queryset().filter(
<b>Q(</b>up_rank__gte=config.REQ_RANK - 10<b>) |</b>
<b>Q(</b>down_rank__gte=config.REQ_RANK - 10<b>)</b>,
status='Pending'
)
只是在 Django 上有一个简单的语法问题, 想象以下查询集:
queryset = Requests.objects.get_queryset().filter(
status='Pending',
up_rank__gte=config.REQ_RANK - 10,
down_rank__gte=config.REQ_RANK - 10
)
有没有什么方法可以像这样设置我的查询:
up_vote__gte=config.REQ_RANK - 10 OR down_vote__gte=config.REQ_RANK - 10 ?! (See pseudo OR)
因为我想同时过滤 up_rank 和 down_rank __gte。我知道的唯一方法是查询链,但对我来说这似乎效率不高,除了查询链语句还有其他方法还是我只是胡说八道链就可以了?
提前致谢
是的,您可以将条件包装在 Q
objects [Django-doc] 中,并使用按位或运算符 (|
),这将生成一个 Q
对象,即析取:
from django.db.models import <b>Q</b>
queryset = Requests.objects.get_queryset().filter(
<b>Q(</b>up_rank__gte=config.REQ_RANK - 10<b>) |</b>
<b>Q(</b>down_rank__gte=config.REQ_RANK - 10<b>)</b>,
status='Pending'
)