django - Django QuerySet 用于通过多对多相关的对象
问题描述
我有以下型号:
class Brand(models.Model):
owner = models.ForeignKey(Account, on_delete=models.DO_NOTHING)
name = models.CharField(max_length=128)
class Product(models.Model):
owner = models.ForeignKey(Account, on_delete=models.DO_NOTHING)
brand = models.ForeignKey(Brand, blank=True, null=True, on_delete=models.DO_NOTHING)
class Store(models.Model):
owner = models.ForeignKey(Account, on_delete=models.DO_NOTHING)
name = models.CharField(max_length=128)
menu = models.ManyToManyField(Product)
address = models.ForeignKey(Address, on_delete=models.DO_NOTHING, blank=True, null=True)
class Address(models.Model):
address_1 = models.CharField(max_length=255)
address_2 = models.CharField(max_length=255, blank=True, null=True)
city = models.CharField(max_length=255)
我目前正在尝试获取特定城市(例如“纽约”)中所有可用产品的列表。由于产品通过 ManyToMany 作为商店中的菜单进行关联,因此我不能 100% 确定运行此查询的最佳方式是什么。
我知道如何深入挖掘相关对象,例如:
Store.objects.all().filter(address__city="New York")
但是我如何从 Product 对象到达商店?
解决方案
像这样的东西:
ids = Store.objects.filter(address__city='New York').values_list('menu', flat=True)
result = Product.objects.filter(id__in=ids)
推荐阅读
- image - MATLAB 保存像素位置以备后用
- c# - T 的 C# 铸造泛型
- kubernetes - 无法从 Kubernetes 集群中的其他服务连接到 Neo4j 集群
- javascript - 传单多边形画出奇怪的形状
- python - Python Pandas 参考部分字符串读取完整字符串
- c++ - AbstractListModel 有两列,如何选择在 ListView 中显示哪一列?
- unit-testing - 如何用 jest 和酵素测试 websocket?
- arrays - mongo 数组中所有集合中 where 条件的平均值
- linux - 当服务器正常运行时间达到阈值时通知的 Shell 脚本
- excel - 在 Excel vba 中将 LBR (xml) 读取为 TXT