私はこのようなモデルを持っています:
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)
このようなモデルを設計したのは、1つの製品がさまざまなサプライヤから供給される可能性があり、どのサプライヤがこの製品の在庫を正確に持っているかを知る必要があるためです。
したがって、私の見解では、クエリの数と特定のロジックを減らすために、すべての結果を値で取得したいと考えています。Stock
また、Pythonでそれらをグループ化することにより、異なる製品行を複製します。
私の見解では、私は以下を使用します:
Product.objects.all().values(
'id', 'title', 'vendor_code', 'vendor__title', 'price',
'product_stock__in_stock', 'stock__title', 'stock__id', 'stock__priority')
INNERJOINとベンダー関連モデルのnull=Trueのため、Productモデルのすべてのレコードが返されるわけではありません。ベンダー参照が設定されている値を返すだけです。
'vendor__title'の代わりに'vendor'を使用すると、以前の結果よりも多くの結果が返されます。これは、ベンダーフィールドで{...'vendor': *id goes here*...}
またはを取得できるためですが、そこに値が{...'vendor': None...}
必要です。vendor__title
だから何か提案、これを達成する方法は?
前もって感謝します