Django ModelAdmin对象在Unittests的后续请求中重用了吗?

2024-04-23 21:35:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用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

MyModelAdmin中的save_model方法开始时,测试应该失败。你知道吗

这是Django的预期功能吗?有没有更好的办法处理?你知道吗


Tags: testselfobjmodelifissavedef
1条回答
网友
1楼 · 发布于 2024-04-23 21:35:05

绝对不应该在ModelAdmin对象上设置state。它在服务器进程的生命周期内一直存在;在它上设置的任何内容都将在请求之间保留。你知道吗

你不会说你在用这个变量做什么,所以很难给出建议,告诉你如何最好地去做它;只是,不是这样。你知道吗

相关问题 更多 >