4

我有模型:

  • 产品
  • 店铺
  • ProductStore(带有外键的附加表Storeand Product,布尔值“启用”和 stock(integer) )

问题:

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

更新:

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)
4

1 回答 1

3

您可以使用以下方法过滤:

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

因此,这将返回一个QuerySet仅包含Products 的 s,该 s与其相关 ProductStoreInfoenabled是 isTrue和 the store_idis the my_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,其中包含stock相关ProductStore对象的列(满足过滤)。

于 2018-10-23T21:43:26.283 回答