问题描述
我使用的是 Django 3.2b1 和 pytest 6.2.2。
我正在尝试使用 pytest 编写测试以确保管理员能够使用 delete_selected
操作删除对象。我的测试如下:
def test_delete_mymodel_action(admin_client):
objs_to_delete = [
MyModel.objects.create(),MyModel.objects.create(),]
MyModel.objects.create() # Don't delete this obj
data = {
"action": "delete_selected","_selected_action": [str(f.pk) for f in objs_to_delete],"post": "yes",# Skip the confirmation page
}
change_url = reverse("admin:myapp_mymodel_changelist")
admin_client.post(change_url,data)
assert MyModel.objects.count() == 1
代码有效并以 302 重定向返回更改列表结束,但对象不会被删除。回复是:
test_delete_mymodel_action - assert 3 == 1
我对此进行测试的原因是某些代码会导致 delete_selected
操作失败。例如,如果您覆盖 get_queryset()
中的 ModelAdmin
并返回使用 distinct()
的查询集,delete_selected
操作将失败。
这里是 Django Admin 中删除确认页面的代码:
<form method="post">
<input type="hidden" name="csrfmiddlewaretoken" value="VCR7vjVYcb2xuMdPUknotrealViwj92wgZrT21k6RbqGxXNlQnCORU1Fp6NzKhn64">
<div>
<input type="hidden" name="_selected_action" value="31418">
<input type="hidden" name="_selected_action" value="31412">
<input type="hidden" name="action" value="delete_selected">
<input type="hidden" name="post" value="yes">
<input type="submit" value="Yes,I’m sure">
<a href="#" class="button cancel-link">No,take me back</a>
</div>
</form>
一些有用的参考资料:
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)