如何根据相关领域过滤django的对象?

How to filter objects at django based on related field?

我有模特:

题目:

如何过滤当前 store__id 具有 Enabled=TrueProduct(来自请求)? 另外,如何为当前商店有库存的每个对象添加一个附加字段?

更新:

class Product(models.Model): 
   pass 
class Store(models.Model):
   pass
class ProductStoreInfo(models.Model):
   enabled = models.BooleanField(default=True)
   product = models.ForeignKey(Product, related_name='stock_info', on_delete=models.CASCADE)
   store = models.ForeignKey(Store, related_name="stock", on_delete=models.CASCADE)
   stock = models.IntegerField(verbose_name=_('Stock'), blank=True, null=True, default=0, max_length=255)
   price = models.FloatField(verbose_name=_('Price'), blank=True, null=True, max_length=255)

您可以通过以下方式过滤:

Product.objects.filter(
    stock_info__enabled=True
    stock_info__store_id=my_store_id
)

这将因此 return 一个仅包含 ProductQuerySet,其中有一个 相关 ProductStoreInfo其中 enabledTruestore_idmy_store_id (将替换为导致此类 id 的表达式)。

我们还可以用股票数据注释我们的查询集,例如:

from django.db.models import F, Min

Product.objects.filter(
    stock_info__enabled=True
    stock_info__store_id=my_store_id
).annotate(
    stock=Min(F('store_info__stock'))
)

此处来自查询集的 Product 对象将有一个额外的属性 .stock,其中包含相关 ProductStore 对象的 stock 列(满足过滤) .