Django Querysets - 按相关对象中的布尔值过滤对象

时间:2016-08-01 21:30:59

标签: django django-queryset

我想为我的Purchase模型创建一个模型管理器:

class Purchase(models.Model)
    number = models.IntegerField

class InventoryLog(models.Model)
    purchase = models.ForeignKey(Purchase)
    sold_out = models.BooleanField(default=false)

我希望我的模型管理员返回与Purchase对象无关的任何InventoryLog个对象,sold_out值为True

有没有办法用查询集,Q对象或F对象来处理这个问题,还是我需要求助于for循环?

2 个答案:

答案 0 :(得分:2)

我相信Purchase.objects().exclude(inventorylog__sold_out=True)会这样做。

答案 1 :(得分:0)

如果您想为您的模型使用manage,请执行以下操作:

#models.py
class PurhchaseNotSoldOut(models.Manager):
    def get_queryset(self):
        return super(PurchaseNotSoldOut, self).get_queryset()\
                          .exclude(purhcase_logs__sold_out=True)

class Purchase(models.Model)
    number = models.IntegerField

    notSoldOut = PurchaseNotSoldOut()

class InventoryLog(models.Model)
    purchase = models.ForeignKey(Purchase, related_name='purchase_logs')
    sold_out = models.BooleanField(default=false)

代码示例更新感谢Peter DeGlopper评论。