python - Django 自动为任意管理表单生成 POST 数据字典

标签 python django unit-testing testing django-admin

我想自动生成一个数据字典以 POST 到 django 管理更改表单,就好像当前对象没有更改一样。基本上模拟如果您在管理员的更改页面上执行 GET,然后单击“保存”,将会发生的 POST 请求。这应该考虑到在该特定更改表单上哪些字段是可编辑的,并且还能够处理 InlineAdmins。

    def auto_generate_changeform_data(object):
        data = ???
        return data

例如,在 the django admin testcases 的第 302 行中他们手动创建 POST 数据字典,但这是应该可以自动生成的,对吧?

然后我会在一个测试用例中使用这个函数,我想测试当我更改该模型上的一个特定字段,甚至是其中一个内联时会发生什么。

    #some testcase
    some_object = SomeModel.objects.get(...)
    url = reverse("admin:appname_modelname_change", args=[some_object.id])
    data = auto_generate_changeform_data(some_object)
    data['some_field'] = 'new value'  #this is the only change I want to make
    response = self.client.post(url, data)

我可以通过使用 ModelAdmin 类上的方法而不是向客户端发送 POST 请求,以更加单元化的方式完成所有这些,但我想要一个功能测试,而不是一个在这种情况下进行单元测试。我实际上确实想模拟完整的 POST 到 url。

我怎样才能得到这个数据字典,特别是关于内联表单集的部分?

最佳答案

我之前通过简单地使用测试客户端执行 GET 请求,然后使用 BeautifulSoup 清除所有 inputselect 元素来完成此操作。

由于这些元素表示其值的方式不同,这并不完全简单,但是 here是一些应该工作的代码。

关于python - Django 自动为任意管理表单生成 POST 数据字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26029153/

相关文章:

python - 在 python 中编写提醒/秒表程序的最佳方法?

python - "TypeError: ' 诠释 ' object does not support item assignment";迭代问题

python - Django-Channels -/admin/portal 不显示创建的新模型

python - Django如何重写 'get_or_create'来创建父对象(如果它不存在)

asp.net - 使用 NUnit、NSubstitute 和异步方法进行单元测试时出现 NullReferenceException

unit-testing - CI 服务器上应该运行什么样的测试?

python - 附加继承对执行速度的影响

python - TensorFlow "tf.estimator Quickstart"示例未生成与教程相同的输出

django - 无法通过django shell删除heroku表

unit-testing - 在 VS 2012 测试资源管理器中使用多个过滤器