我是Django和Python的新手,使用TDD构建我的第一个应用程序...我想复制一个模型对象Task
的实例。我使用了以下代码,它在测试期间正常工作:
import copy
class Task(models.Model):
...
def make_copy(self):
new_task = copy.copy(self)
new_task.save()
return new_task
但是当“正常”运行此代码时,在服务器中,我注意到它无法正常工作:没有创建新对象。我发现在保存之前我必须添加new_task.id = None
,我理解这个原因......
但是如果copy.copy
不知道Django并且因此不会更改id
本身,为什么在测试期间返回的对象有id == None
呢?
答案 0 :(得分:3)
听起来您的测试用例与“正常”用例中的用法并不完全匹配。
为数据库中存在的对象设置id
字段。如果您将make_copy()
方法设置为id
设置的对象,它将显示失败,因为它没有创建新的数据库对象,它只是保存现有对象(通过Python副本,具有现有{ {1}})。
我猜您的测试用例是将id
个对象传递给Task
,其中make_copy()
为无(因此出现工作),而在“正常“使用,对象进入id
设置。 (您可以使用简单的print或assert语句来测试此假设。)
一个简单的解决方案可能是在复制操作后立即将id
设置为id
。这样,始终会创建一个新的数据库对象。
最后,遇到相同情况的其他人:http://www.nerdydork.com/copy-model-object-in-django.html