首页 > 解决方案 > 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 对象到达商店?

标签: djangodjango-rest-framework

解决方案


像这样的东西:

ids = Store.objects.filter(address__city='New York').values_list('menu', flat=True)
result = Product.objects.filter(id__in=ids)

推荐阅读