Django:通过泛型关系过滤order_

时间:2012-05-24 12:30:31

标签: python django postgresql

我有两个班级:

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

有没有办法通过translate__text按当前语言过滤order_by来订购类别?如果我使用

Category.objects.all().order_by("translations__text")

我按类别排序,而不仅仅是当前语言。我想,我所知道的是以某种方式过滤order_by设置(仅使用给定语言的翻译)?有办法吗?

DB = PostgreSQL

感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

重复是不可避免的。这是Django为通过关系的子句生成的SQL的结果。见票:https://code.djangoproject.com/ticket/11387

即使在行李箱里也没有解决,机票已经3年了,14个月内没有修改过,所以我不会屏住呼吸。

更新*** 根据引用的错误报告https://code.djangoproject.com/ticket/11387,引用的错误在2013年初修复。从我最初的测试开始,看来在这篇文章中对推荐答案调用distinct()将返回正确的查询集。

Category.objects.filter(translations__language='English').order_by('translations__text').distinct()

答案 1 :(得分:1)

你是说这个吗?

Category.objects.filter(translations__language="English").order_by("translations__text")

答案 2 :(得分:1)

试试这个:

Category.objects.filter(translations__language='en').order_by("translations__text")