Django过滤多对多

时间:2018-12-07 13:48:59

标签: django django-models django-queryset

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

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用于“区域”。

1 个答案:

答案 0 :(得分:0)

尝试

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

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