首页 > 解决方案 > Django过滤多对多

问题描述

如果我的产品只能在某些地区销售。一个客户也可以属于多个区域。例子:

class Customer(models.Model):
    firstname = models.CharField(max_length=100, default="")

class Product(models.Model):
    productname = models.CharField(max_length=100, default="")

class Region(models.Model):
    regionname = models.CharField(max_length=100, default="")


class CustomerRegionLink(models.Model):
    customer = models.ForeignKey(Customer)
    region = models.ForeignKey(Region)

class ProductRegionLink(models.Model):
    product = models.ForeignKey(Product)
    region = models.ForeignKey(Region)

如果我现在有一个 Customer 对象。如何筛选出可以订购的产品?

我尝试过以下版本:

thecustomer = Customer.objects.get(id=1)
prods = ProductRegionLink.object.filter(region__in=thecustomer.customerregionlink.all())

此错误如:ValueError:无法将 QuerySet 用于“CustomerRegionLink”:将 QuerySet 用于“Region”。

标签: djangodjango-modelsdjango-queryset

解决方案


尝试

thecustomer = Customer.objects.get(id=1)
prods = ProductRegionLink.object.filter(region__in=[cr_link.region for cr_link in thecustomer.customerregionlink.all()])

与您当前的查询一样,您试图在 customerregionlink 查询集中而不是在区域查询集或列表中查找区域。


推荐阅读