Похоже, ваш тестовый пример не полностью соответствует использованию в вашем "нормальном" сценарии использования.
Поле id
установлено для объектов, которые существуют в базе данных.Если вы передадите методу make_copy()
объект с установленным id
, он, похоже, потерпит неудачу, потому что он не создает новый объект базы данных, он просто сохраняет существующий объект (через копию Python с существующим id
).
Я предполагаю, что ваш тестовый пример передает Task
объекты в make_copy()
с id
, равным None (и, следовательно, , кажущийся для работы), в то время как при "нормальном" использованииобъекты входят с установленным id
.(Вы можете проверить эту гипотезу с помощью простого оператора print или assert.)
Одним простым решением может быть установка id
в None
сразу после операции копирования.Таким образом, всегда создается новый объект базы данных.
Наконец, кто-то еще с такой же ситуацией: http://www.nerdydork.com/copy-model-object-in-django.html