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")
Вернуться на верх