Django Упорядочивание по определенному полю ManyToMany
задана следующая структура:
class MovieTranslation:
lang=CharField()
title=CharField()
class Movie:
key = CharField()
movie_translations = ManyToManyField(MovieTranslation)
Теперь, например, для английских пользователей я хочу сортировать по английскому MovieTranslation
из Movie
?
Я хочу использовать его в ViewSet
как Filterset
класс.
Я думаю, что это должно быть что-то вроде order_by(movie_translations__name='en'__title)
. Последняя часть, конечно, не работает. Я нашел решения, для фильтрации раньше, но я не думаю, что фильтрация по английским переводам работает, так как тогда я получаю список объектов Movie Objects, которые имеют английское название, но могут иметь другие языки. Я хочу сортировать конкретно по полю manytomany field.
Так есть ли способ упорядочить по определенному ManyToMany
экземпляру (т.е. все MovieTranslations
, где имя 'en')?
Я думал об annotate, но столкнулся с теми же проблемами
Сейчас я думаю, что, возможно, объединение с определенным полем ManyToMany
может сработать.
Следующее должно работать:
Movie.objects
.filter(movie_translations__title='en')
.order_by('movie_translations__title')
Обратите внимание, что здесь предполагается, что все фильмы имеют английский перевод. SQL-запрос, создаваемый ORM, использует INNER JOIN
, который отфильтрует фильмы, не имеющие перевода, с помощью title=en
.
Попробуйте это
Movie.MovieTranslation.filter(lang="en").order_by("-title")