如何根据相关领域过滤django的对象?
How to filter objects at django based on related field?
我有模特:
- 产品
- 商店
- ProductStore(附加 table,外键指向
Store
和 Product
,还有布尔值 'enabled' 和库存(整数))
题目:
如何过滤当前 store__id
具有 Enabled=True
的 Product
(来自请求)?
另外,如何为当前商店有库存的每个对象添加一个附加字段?
更新:
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 一个仅包含 Product
的 QuerySet
,其中有一个 相关 ProductStoreInfo
其中 enabled
是 True
而 store_id
是 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
,其中包含相关 ProductStore
对象的 stock
列(满足过滤) .
我有模特:
- 产品
- 商店
- ProductStore(附加 table,外键指向
Store
和Product
,还有布尔值 'enabled' 和库存(整数))
题目:
如何过滤当前 store__id
具有 Enabled=True
的 Product
(来自请求)?
另外,如何为当前商店有库存的每个对象添加一个附加字段?
更新:
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 一个仅包含 Product
的 QuerySet
,其中有一个 相关 ProductStoreInfo
其中 enabled
是 True
而 store_id
是 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
,其中包含相关 ProductStore
对象的 stock
列(满足过滤) .