Django ModelAdmin对象重复用于Unittests中的后续请求?

时间:2015-10-07 17:21:31

标签: python django python-unittest

我正在尝试使用Unittests在ModelAdmin中重现一个(明显的)问题。

在ModelAdmin中,我在保存模型时执行一些额外的操作。在这样做时,我将介绍新的实例变量collection_page

class MyModelAdmin(admin.ModelAdmin):
    ...
    def save_model(self, requset, obj, form, change):
        ...
        if obj_is_new:
            self.collection_page = ....
        ...
        self.collection_page   # <== AttributeError if obj is not new.

我使用django.test.Client两次测试模块,如下所示:

class CollectionAdminTestCase(django.test.TestCase):
    ...
    def test_redirect_after_editing_existing_object(self):
        self.client.post(
            self.creation_path,
            self.creation_post
        )
        response = self.client.post(
            self.change_path,
            self.change_post
        )
        self.assertEqual(
            response.status_code, 302
        )

测试通过,但它应该失败。

当我添加

        try:
            del self.collection_page
        except AttributeError:
            pass

save_model的{​​{1}}方法的开头,测试失败了。

这是Django的预期功能吗?有没有更好的方法来处理它?<​​/ p>

1 个答案:

答案 0 :(得分:2)

您绝对不应该在ModelAdmin对象上设置状态。它存在于服务器进程的整个生命周期中;任何设置都会在请求中保留。

你不能说出你对这个变量做了什么,所以很难就如何最好地做任何事情给出建议;只是,不是这样。