如何在Django中使用order_by泛型关系?

时间:2012-11-27 23:32:26

标签: django django-contenttypes

我基本上试图与此问题中描述的相反:Django: filtering order_by a generic relation

class Translation(models.Model):
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    object = generic.GenericForeignKey('content_type', 'object_id')
    field = models.CharField(max_length=64) #field from the translated model
    language = models.CharField(max_length=8, choices=settings.LANGUAGES, verbose_name=_("language"))
    text = models.TextField() #translation

class Category(models.Model):
    translations = generic.GenericRelation(Translation)
    name = models.CharField(max_length=128, verbose_name=_("Name"))
    slug = models.SlugField(blank=True, default="", verbose_name=_("Slug"))

我想按类别名称检索所有翻译和订单。像这样:

Translation.objects.all().order_by('object__name')

但这不起作用,因为object不是数据库中的列。尝试按content_type__name订购也不起作用。

2 个答案:

答案 0 :(得分:0)

This post问了一个相同的问题,但发现这根本不可能。不幸的是,您似乎需要使用raw()手动构建SQL查询。

答案 1 :(得分:0)

在类别中,您需要创建一个相关的查询名称,如...

class Category(models.Model):
    translations = generic.GenericRelation(Translation, related_query_name='category')
    name = models.CharField(max_length=128, verbose_name=_("Name"))
    slug = models.SlugField(blank=True, default="", verbose_name=_("Slug"))

然后你就可以进行查询了 Translation.objects.all().order_by('category__name')