生成未创建的外键列表

时间:2016-10-20 03:29:51

标签: python django

当我的模型结构如下时,如何获取以给定语言翻译的 NOT 项目:

class Language(models.Model):
    name = models.CharField(max_length=20, unique=True)
    code = models.CharField(max_length=5, unique=True)

class Item(models.Model):
    id = ...

class Translation(models.Model):
    name = models.CharField(max_length=100)
    language = models.ForeignKey('languages.Language')
    item = models.ForeignKey(Item)

我需要一个有效的解决方案,会有数百万条记录。

所以我基本上需要遍历一个列表并添加缺少的翻译。

2 个答案:

答案 0 :(得分:0)

我认为没有一种非常有效的方法。至少没有您提供的信息。我会这样做。

from itertools import product

existing_translatinos = {'_'.join((t.item_id + t.language_id)) for t in Translation.objects.all()}

for i, l in product(Item.objects.all(), Language.objects.all()):
    if '_'.join((i.id, l.id)) not in existing_translations: 
        Translation.objects.create(...)

答案 1 :(得分:0)

  

如何获取以给定语言翻译的 NOT 项目

items = Items.objects.filter(translation__language=lang_obj)

以上查询将为您提供所有没有特定语言lang_obj翻译的项目。现在,您可以遍历这些项目并添加缺少的翻译。