Django选择所有值()与可空的相关字段

时间:2012-06-13 10:29:40

标签: django django-models django-queryset django-orm

我有这样的模特:

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': *id goes here*...}{...'vendor': None...},但我需要{{1那里的价值。那么任何建议,如何实现这个目标?

提前致谢

1 个答案:

答案 0 :(得分:0)

vendor__title更改为product_stock__product__vendor__title帮助我解决了问题。