Как отфильтровать и получить доступ к полям ManyToMany в Django QuerySet? - PullRequest
0 голосов
/ 09 мая 2018

Предположим, у меня есть следующие модели с отношением ManyToMany:

class City(models.Model):
    name = models.CharField(max_length=100)

class Course(models.Model):
    name = models.CharField(max_length=100)
    cities = models.ManyToManyField(City)

Теперь я хочу отфильтровать курсы с указанным названием в данном городе:

courses = Course.objects.filter(name='Course1', cities__name='City1')

Можно ли получить доступ к полям City через courses QuerySet? В этом примере, возможно ли получить 'City1' только от courses?

Заранее спасибо.

1 Ответ

0 голосов
/ 09 мая 2018

Для этого можно использовать prefetch_related с объектом предварительной выборки .

city1 = City.objects.filter(name='City1')
courses = Course.objects.filter(name='Course1', cities__name='City1').prefetch_related(
    Prefetch('cities', queryset=city1)
)
...