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

第一个条件:语言是英文

第二个条件:不存在引用它的另一个字符串。

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 回答