Джанго фильтр много ко многим - PullRequest
0 голосов
/ 07 декабря 2018

Если у меня есть товары, которые можно продать только в некоторых регионах.Также клиент может принадлежать к нескольким регионам.Пример:

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 голосов
/ 07 декабря 2018

Попробуйте

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

Как и в текущем запросе, вы пытаетесь найти регион в наборе запросов customerregionlink, а не в наборе запросов или списке регионов.

...