Django:通过特定的backwared相关属性进行排序

时间:2012-02-20 11:05:55

标签: python django

我有两种模式:

class Video(models.Model):
    slug = models.SlugField(blank=True, default='', db_index=True, unique=True)


class VideoTranslation(models.Model):
    video = models.ForeignKey(Video, related_name='translations')
    language = models.CharField(max_length=3, choices=settings.LANGUAGES)
    name = models.CharField(max_length=255, db_index=True)

视频包含有关视频的一些信息,视频翻译包含这些视频的翻译名称。

我想用其中一种语言从视频模型中获取它。

可以通过sql查询这样:

SELECT * FROM video_video IN join video_videotranslation ON video_video.id = video_videotranslation.video_id where video_videotranslation.language="en" ORDER BY video_videotranslation.name;

但我真的想避免原始的SQL查询。

是否可以使这种查询仅依赖于Django ORM?

2 个答案:

答案 0 :(得分:1)

当然,它看起来像:

Video.objects.filter(translations__language='en').order_by('translations__name')

请参阅lookups that span relationships了解语法和documentation of order_by

答案 1 :(得分:1)

Video.objects.filter(translations__language__iexact='en').order_by('translations__name')