我有两个班级:
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
感谢您的帮助!
答案 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")