我基本上试图与此问题中描述的相反: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
订购也不起作用。
答案 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')