Django查询 - 检索没有指向其他对象的对象

时间:2012-12-22 19:31:53

标签: python django

我有一个名为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)

但我认为这是一段非常讨厌的代码。有没有办法在单个查询中进行此操作?

2 个答案:

答案 0 :(得分:4)

第一个条件:语言是英语

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

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

需要foreignkey backward reference

答案 1 :(得分:1)

试试这个

String.objects.filter(language__name="English", original_string__isnull=True)