0

私には2つのクラスがあります:

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セットをフィルタリングすることです(特定の言語の翻訳のみを使用するため)?そうする方法はありますか?

DB = PostgreSQL

手伝ってくれてありがとう!

4

3 に答える 3

3

重複は避けられません。これは、Djangoがジェネリックリレーションのorderby句に対して生成する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()
于 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 に答える