1

Keyword という名前の単純なモデルがあります。

class Keyword(models.Model):
    name = models.CharField(max_length=50, blank=False, null=False)

bulk_create を実行しようとしていますが、バルク データには既存のキーワードが含まれている可能性があるため、2 つの手順で操作を行います。最初に既存のキーワードをフェッチしてから、新しいキーワードを一括作成します。以下は、私がプロセスで行っていることの小さな例です。

In [12]: t = ["aaaa", "dene"]

In [16]: existing = Keyword.objects.filter(name__in=t).all()

In [17]: new = set(t).difference(list(existing.values_list("name", flat=True)))                                

In [18]: new
Out[18]: {'aaaa'}

In [19]: existing
Out[19]: [<Keyword: dene>]

In [20]: created = Keyword.objects.bulk_create([Keyword(name=name) for name in new])                           

In [21]: created
Out[21]: [<Keyword: aaaa>]

In [22]: existing
Out[22]: [<Keyword: aaaa>, <Keyword: dene>]

bulk_create と create の両方が、前のフィルターの結果セットを更新します。これはおそらくバグですが、ここでいくつかの点が欠けている可能性もあります。私の実装に何か問題がありますか?

Django のバージョンは 1.5.3 です。

4

1 に答える 1