0

我有两节课:

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

有没有办法通过按当前语言过滤 order_by 的 translation__text 来排序类别?如果我使用

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

我得到按所有翻译排序的类别,而不仅仅是当前语言。我想,我需要以某种方式过滤 order_by 集(仅使用给定语言的翻译)?有没有办法这样做?

数据库 = PostgreSQL

感谢帮助!

4

3 回答 3

3

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

连trunk都没有解决,而且票是3年了,14个月没修改过,所以我不会屏住呼吸。

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

Category.objects.filter(translations__language='English').order_by('translations__text').distinct()
于 2012-05-24T14:42:29.187 回答
1

你是这个意思吗?

Category.objects.filter(translations__language="English").order_by("translations__text")
于 2012-05-24T12:44:57.673 回答
1

尝试这个:

Category.objects.filter(translations__language='en').order_by("translations__text")
于 2012-05-24T12:46:29.210 回答