初始化QueryDict.fromkeys

wim*_*wim 9 python django

我们可以从键列表中初始化一个新的dict实例:

>>> dict.fromkeys(['spam', 'spam', 'potato'])
{'potato': None, 'spam': None}
Run Code Online (Sandbox Code Playgroud)

一个querydict 是一个 dict,所以这应该工作,对吧?

>>> QueryDict.fromkeys(['spam', 'spam', 'potato'])
TypeError: __init__() takes at least 2 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)

当然,我可以做一些蹩脚的事情QueryDict('spam&spam&potato'),但我的问题是:.fromkeys方法是可用的,还是完全破碎的?

如果是前者,你如何使用它?如果是后者,为什么不在子类中明确禁用它?

wim*_*wim 1

tl;drQueryDict.fromkeys将在 Django 1.11 版本中开始工作。

在 PyCon 2016 上,我有机会与一些核心 Django 开发人员交谈,我们一致认为继承的方法已被破坏并违反了里氏替换原则。在其中一次冲刺中,我能够解决这个问题并修补 QueryDict 类。

这是相关的提交和问题,修复现已合并到 master 中并且已经在文档中。我使用了类似于hynekcer的第一个提案的实现。