我有以下型号:
Store
和Product
外键的附加表,还具有布尔值“ enabled”和stock(integer))问题:
如何为当前Product
过滤Enabled=True
个具有store__id
的{{1}}(来自请求)?
另外,如何为当前商店中有库存的每个对象添加一个附加字段?
已更新:
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)
答案 0 :(得分:1)
您可以使用以下方法对此进行过滤:
Product.objects.filter(
stock_info__enabled=True
stock_info__store_id=my_store_id
)
因此,这将返回一个QuerySet
,其中仅包含与{em>相关的 Product
,其中ProductStoreInfo
为{{ 1}},而enabled
是True
(将替换为产生这种ID的表达式)。
我们还可以使用库存数据注释查询集,例如:
store_id
在这里,来自查询集的my_store_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
列(满足过滤条件)。< / p>