Django按特定的多对多字段排序

wvt8vs2t  于 2022-12-14  发布在  Go
关注(0)|答案(2)|浏览(160)

给出了以下结构:

class MovieTranslation:
  lang=CharField()
  title=CharField()

class Movie:
  key = CharField()
  movie_translations = ManyToManyField(MovieTranslation)

现在举个例子,对于英语用户,我想按Movie的英语MovieTranslation排序,我想把它作为Filterset类用在ViewSet中。
我认为它应该是order_by(movie_translations__name='en'__title)之类的东西。最后一部分当然不起作用。我找到了解决方案,过滤之前,但我不认为过滤英语翻译工作,因为我得到了一个电影对象谁有一个英文标题,但仍然可以有其他语言的列表。我想具体排序的领域,许多领域。
那么,是否有办法按特定的ManyToMany示例(即名称为“en”的所有MovieTranslations)进行排序?
我曾考虑过注解,但也遇到了同样的问题
我现在在想,加入一个特定的ManyToMany领域可能会起作用。

mlmc2os5

mlmc2os51#

以下应起作用:

Movie.objects
  .filter(movie_translations__title='en')
  .order_by('movie_translations__title')

请注意它假设所有电影都有英语翻译。ORM生成的SQL查询使用INNER JOIN,这将过滤掉没有翻译为title=en的电影。

blmhpbnm

blmhpbnm2#

试试这个

Movie.MovieTranslation.filter(lang="en").order_by("-title")

相关问题