我有这样的模型:
class Vendor(models.Model):
title = models.CharField()
class Product(models.Model):
...
vendor = models.ForeignKey(Vendor, null=True, blank=True)
stock = models.ManyToManyField(Supplier, through='Stock')
class Stock(models.Model):
in_stock = models.BooleanField(default=True)
supplier = models.ForeignKey('catalog.Supplier', related_name='supplier_stock')
product = models.ForeignKey('catalog.Product', related_name='product_stock')
priority = models.IntegerField(default=0)
我设计了这样的模型,因为一个产品可以由不同的供应商提供,我需要知道哪个供应商有这个产品的库存。
所以,在我看来,我希望得到所有结果的值,以减少查询的数量和一些特定的逻辑。它也用不同的复制我的产品行Stock
,在python中我将它们分组。
在我看来,我使用:
Product.objects.all().values(
'id', 'title', 'vendor_code', 'vendor__title', 'price',
'product_stock__in_stock', 'stock__title', 'stock__id', 'stock__priority')
由于供应商相关模型的 INNER JOIN 和 null=True,它返回的不是产品模型的所有记录。它只返回设置了供应商参考的值。
如果我使用 'vendor' 而不是 'vendor__title' 它会返回比前一个结果更多的结果,因为在 vendor 字段中我可以获得{...'vendor': *id goes here*...}
or {...'vendor': None...}
,但我需要vendor__title
那里的值。那么有什么建议,如何实现这一目标?
提前致谢