0
我想用Unittests在ModelAdmin中重現一個(明顯的)問題。Django ModelAdmin對象在Unittests中的後續請求中被重用?
在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
)
測試通過,但它應該失敗。
當我在save_model
方法在MyModelAdmin
開頭添加
try:
del self.collection_page
except AttributeError:
pass
,測試失敗,因爲它應該。
這是Django的預期功能?有沒有更好的方法來處理它?
我在保存模型時所做的事情太複雜,無法在沒有實例變量的情況下執行 - 我創建了一系列包含特定內容的cms頁面。所以,我會把我的邏輯放到模型中。有關管理員的便利是有人可以訪問請求用戶。通知模型實例關於用戶可能是最好的主意。 –