У меня есть простая модель с именем ключевого слова:Джанго: model.objects.create() изменяет предыдущую model.objects.filter() 's ResultSet
class Keyword(models.Model):
name = models.CharField(max_length=50, blank=False, null=False)
Я пытаюсь сделать bulk_create, но объемные данные могут содержать уже существующие ключевые слова, поэтому я выполняю операцию в два этапа. Сначала выберите существующие ключевые слова, затем bulk_create новые ключевые слова. Ниже приведен небольшой пример того, что я делаю в процессе:
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 и создать обновления результирующего предыдущего фильтра. Скорее всего, это ошибка, но я также могу пропустить некоторый момент здесь. Что-то не так в моей реализации?
Версия Django - 1.5.3.
так что проблема в том, что существующие результаты показывают 2 вместо 1? кажется, что он переоценивает фильтр. – jproffitt