copy.copy(object)在测试期间返回id == None的对象?

时间:2011-02-13 14:16:11

标签: django copy

我是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呢?

1 个答案:

答案 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