2012-11-27 51 views
3

我基本上是试图做的是在这个问题上所描述的相反:Django: filtering order_by a generic relation如何在Django中order_by泛型关系?

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

查询,如果有什么像产品组别另一类也已翻译为一个通用关系,但它没有列'名称'。当你打电话给order_by('object__name')时,你是否也想要这些对象? –

+0

好点。我期望的功能在其他应用程序中不会很可重用,但幸运的是,对于我的项目,我永远不会有与翻译相关的类没有名称字段。 –

+0

然后我建议你不要使用GenericForeignKey,而应该使用一个简单的ForeignKey。您可以使用本手册https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey查看它的工作原理。 –

回答

0

This post问了一个相同的问题,但发现它根本不可能。不幸的是,它看起来像你需要使用raw()手动构建SQL查询。

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')