Django 查询集过滤不提供预期的行为
Django queryset filtering not providing expected behavior
我有一个应用程序在前端接收用户的输入。
我尝试实现的功能应该在前端显示玩家 <=0 的所有标题,或者在数据库中显示 NULL 值。
player_filter = 'lte'
if playerinput_high == '0':
player_kwargs = {
'player_points__isnull': True,
'player_points__{}'.format(reviewsign_high): float(playerinput_high)
}
stats = stats.filter(**player_kwargs)
但是,我在这里没有得到任何结果。如果我删除一个参数,即 'player_reviews__isnull': True
,我会得到所有评论小于或等于 0 的标题。
反之亦然,如果我删除 'player_reviews__{}'.format(playersign_high): float(playerinput_high)
,我会得到所有带有 NULL 统计数据的统计数据。但它们放在一起,显示 0 个结果。关于这里的解决方案的任何想法?谢谢!
Django 的 ORM 中的多个过滤器在生成 SQL 时默认为 'AND'。您应该考虑使用 Q 对象来指定 'OR' 查询。 https://docs.djangoproject.com/en/3.2/topics/db/queries/#complex-lookups-with-q-objects
from django.db.models import Q
titles = titles.filter(Q(**review_kwargs, _connector=Q.OR))
我有一个应用程序在前端接收用户的输入。
我尝试实现的功能应该在前端显示玩家 <=0 的所有标题,或者在数据库中显示 NULL 值。
player_filter = 'lte'
if playerinput_high == '0':
player_kwargs = {
'player_points__isnull': True,
'player_points__{}'.format(reviewsign_high): float(playerinput_high)
}
stats = stats.filter(**player_kwargs)
但是,我在这里没有得到任何结果。如果我删除一个参数,即 'player_reviews__isnull': True
,我会得到所有评论小于或等于 0 的标题。
反之亦然,如果我删除 'player_reviews__{}'.format(playersign_high): float(playerinput_high)
,我会得到所有带有 NULL 统计数据的统计数据。但它们放在一起,显示 0 个结果。关于这里的解决方案的任何想法?谢谢!
Django 的 ORM 中的多个过滤器在生成 SQL 时默认为 'AND'。您应该考虑使用 Q 对象来指定 'OR' 查询。 https://docs.djangoproject.com/en/3.2/topics/db/queries/#complex-lookups-with-q-objects
from django.db.models import Q
titles = titles.filter(Q(**review_kwargs, _connector=Q.OR))