我有以下模型结构。是否可以更改InventoryManager以检查由于切片后面包中的面包是否已不再存在?
from django.db import models
from shipping.models import Shipment
class InventoryManager(models.Manager):
def get_queryset(self):
# BUG: Does not check if BreadSlices are shipped
return super(InventoryManager, self).get_queryset().filter(
shipment__isnull=True, )
class BreadLoaf(models.Model):
shipment = models.ForeignKey(Shipment, null=True, blank=True, )
...
objects = models.Manager()
inventory = InventoryManager()
def get_shipment(self):
if self.breadslice_set.all().exists():
# BUG: Returns duplicates
return [bs.shipment for bs in self.breadslice_set.all()]
else:
return [self.shipment]
class BreadSlice(models.Model):
loaf = models.ForeignKey(BreadLoaf)
shipment = models.ForeignKey(Shipment, null=True, blank=True, )
...
我希望使用get_shipment方法,但它不是一个字段。我试了以下没有成功
class InventoryManager(models.Manager):
def get_queryset(self):
return super(InventoryManager, self).get_queryset().filter(
shipment__isnull=True,
breadslice_set.shipment_isnull=True, )
感谢阅读!
答案 0 :(得分:0)
解决方案:
class InventoryManager(models.Manager):
def get_queryset(self):
return super(InventoryManager, self).get_queryset().filter(
shipment__isnull=True,
breadslice__shipment__isnull=True, )
作品。
BreadLoaf.inventory.all() # Returns all loaf of bread still in inventory.
https://docs.djangoproject.com/en/1.6/topics/db/queries/#lookups-that-span-relationships