3

我基本上试图做与这个问题中描述的相反的事情:Django: filtering order_by a generic relationship

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也不起作用。

4

2 回答 2

0

这篇文章问了一个相同的问题,但发现这根本不可能。不幸的是,您似乎需要raw()手动构造 SQL 查询。

于 2012-11-28T00:32:39.237 回答
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')

于 2016-01-29T22:44:02.843 回答