Почему я не могу сохранить свою модель с общим отношением дважды в Django? - PullRequest
2 голосов
/ 29 апреля 2010

Я получил модель TrackedItem с общим отношением, связывающим любую модель, которую предполагается отслеживать.

Если я сделаю это:

t = TrackedItem(content_object=MyModel)
t.save()
t.save()

Я получаю:

IntegrityError: (1062, "Duplicate entry '1' for key 'PRIMARY'")

Действительно, первое сохранение создало запись с "1" в качестве PK. Но второе сохранение не должно вставляться, оно должно обновляться.

Как мне обновить модель, которую я не могу сохранить дважды?

С обычной моделью я могу сэкономить столько, сколько хочу.

РЕДАКТИРОВАТЬ: это может быть не связано вообще с родовыми отношениями.

У меня переопределенное сохранение, и я называю супер в нем, таким образом:

super(TrackedItem, self).save(self, *args, **kwargs)

если я сделаю это так, это сработает:

model.Model.save(self, *args, **kwargs)

Ответы [ 2 ]

5 голосов
/ 29 апреля 2010

Ваша проблема, скорее всего, из-за неправильного использования 'super'. Должно быть так:

super(TrackedItem, self).save(*args, **kwargs)
0 голосов
/ 29 апреля 2010

Я предполагаю, что это проблема транзакции с БД. Существует ли DB-Commit между двумя вызовами сохранения? Может быть, ваш вид находится под управлениемaction.commit_on_sucess.

2 Возможности:

  transaction.commit() # within transaction.commit_manually

или

  t.save(force_update=True) # 2nd save call
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...