我想自动生成一个数据字典以 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 清除所有 input
和 select
元素来完成此操作。
由于这些元素表示其值的方式不同,这并不完全简单,但是 here是一些应该工作的代码。
关于python - Django 自动为任意管理表单生成 POST 数据字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26029153/