gpt4 book ai didi

django - 使用 pytest 在 Django Admin 中测试 delete_selected 操作

转载 作者:行者123 更新时间:2023-12-04 16:46:07 28 4
gpt4 key购买 nike

我正在使用 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>
一些有用的引用资料:
  • Django's delete_selected() method.
  • Testing custom admin actions in django SO Answer
  • 最佳答案

    我只是遇到了同样的问题。我注意到我用错误的用户登录。
    我的思考过程:

  • 302并不表示有任何问题,响应中也没有内容 ( b'' )
  • 我加了 follow=Trueself.client.post .回复是 200并且没有对象,所以我认为它工作正常,但断言失败
  • 我把断点放在 delete_selecteddjango.contrib.admin.actionsn = queryset.count()0 .
  • 如果后面没有列出但没有要删除的内容( n = 0 ),让我们看看之前是否有要删除的内容。
  •     response = self.client.get(reverse("admin:myapp_mymodel_changelist"))
    self.assertContains(response, obj.id)
    不!
    所以你的测试的问题是这些对象不能被删除,因为它们不能被检索,可能是由于一些过滤。
    请注意,如果未找到对象,Django 管理员将不会引发 404。

    关于django - 使用 pytest 在 Django Admin 中测试 delete_selected 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66504858/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com