Django - 根据字段值进行不同的查询

时间:2018-01-04 03:00:26

标签: django

我陷入了一个看似简单的问题。如果sold_data为空,我想要执行不同的查询集。有没有有效的方法来做到这一点?或者我是否需要使用for循环并遍历所有列表对象并检查每个对象?

class Listing(models.Model):
    list_price = models.IntegerField()
    sold_price = models.IntegerField(null=True, blank=True)

    ... other fields
data = Listing.objects.filter(...) # Note: I had already made other queries

if sold_price == None:
    data = data.filter(list_price__gte=1)
else:
    data = data.filter(sold_price__gte=1)

2 个答案:

答案 0 :(得分:1)

如果您想检查对象是否为None,请使用is运算符
我不确定我是否理解你的问题是我得到的:如果数据包含一个空值的对象,你想过滤list_price否则过滤器sold_price

你可以试试这个

if data.filter(sold_price__isnull=True).exists():
    data = data.filter(list_price__gte=1)
else:
    data = data.filter(sold_price__gte=1)

答案 1 :(得分:1)

您可以使用Q object

from django.db.models import Q

# your filtered queryset is in 'data' varibale
data.filter(Q(sold_price__isnull=False, sold_price__gte=1) | Q(sold_price__isnull=True, list_price__gte=1))