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
值为 True
的 InventoryLog
对象无关的任何 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 的评论。
我想为我的采购模型创建一个模型管理器:
class Purchase(models.Model)
number = models.IntegerField
class InventoryLog(models.Model)
purchase = models.ForeignKey(Purchase)
sold_out = models.BooleanField(default=false)
我希望我的模型管理器 return 与 sold_out
值为 True
的 InventoryLog
对象无关的任何 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 的评论。