Как сделать запрос в django из одной модели в другую?

Рейтинг: 0Ответов: 1Опубликовано: 22.02.2023

Есть три класса в models - Movies - Country - Cities

Movies связанна с Countries

class Movies (models.Model):
country = models.ManyToManyField('Country', blank=True, null=True)

Cities связанна с Country

class Cities (models.Model):
    country = models.ForeignKey('Country', on_delete=models.CASCADE, blank=True, null=True)

Дальше во Views я делаю запрос, пытаясь получить все Movies в которых упоминается Cities, через Country. В документации пишут, что промежуточные запросы не нужны.

def get_city(request, city_slug):
    city = Cities.objects.get(slug=city_slug)
    movies = Movies.objects.filter(cities__city__contains=city.id)
    return (request, "movies/city.html", {"movies": movies,"city": city})

Но получаю ошибку на сайте

FieldError at /en/movies/city/new-york/ Related Field got invalid lookup: contains

Ответы

▲ 0Принят

Судя по всему, ошибка связана с неправильным использованием lookup-запроса. В данном случае Вы пытаетесь использовать contains как lookup для поля cities, но contains не является поддерживаемым запросом для ManyToManyField.

В Вашем случае, Вы можете использовать __country для доступа к полю Country связанной модели Movies, и использовать поддерживаемые lookup-запросы для поля Country.

Исправленный код:

def get_city(request, city_slug):
    city = Cities.objects.get(slug=city_slug)
    movies = Movies.objects.filter(country__cities=city)
    return (request, "movies/city.html", {"movies": movies,"city": city})