3

次のような String という名前のモデルがあります。

class String(models.Model):
    text = models.TextField()
    language = models.ForeignKey(Language, default=get_english)
    original_string = models.ForeignKey('self', null=True, blank=True)

文字列のデフォルト言語は英語です。次に、データベースの同じテーブルに、さまざまな言語の翻訳済み文字列があり、それぞれが を介して英語の対応する文字列を指していますoriginal_string

私が必要としているのは、別の言語の文字列に関連付けられていない、つまり翻訳されていない英語の文字列を取得することです。

現在、英語のすべての文字列を繰り返し処理し、必要なものを次のようにリストに追加しています。

translatable_strings = String.objects.filter(language__name="English")

strings = []

for string in translatable_strings:
    if not String.objects.filter(language=translator_lang,
                                 original_string=string).exists():
        strings.append(string)

しかし、それはかなり厄介なコードだと思います。これを単一のクエリで作成する方法はありませんか?

4

2 に答える 2

4

最初の条件: 言語は英語です

2 番目の条件: それを参照する別の文字列が存在しない。

String.objects.filter( language = 'english', 
                       string__original_string__isnull = True )

外部キーの後方参照が必要です。

于 2012-12-22T19:46:32.157 に答える
1

これを試して

String.objects.filter(language__name="English", original_string__isnull=True)
于 2012-12-22T19:40:51.520 に答える