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

Django Querysets - Filter objects by Boolean values in a related object

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

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

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

我希望我的模型管理器 return 与 sold_out 值为 TrueInventoryLog 对象无关的任何 Purchase 对象

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

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

如果你想为你的模型使用管理,这个怎么样:

#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 的评论。