|
|
1
5
the sources
:元类是
这意味着使用base创建新类存在一些脆弱性
确实很神奇,但这就是框架的缺点,这些框架使用“纯粹是为了语义糖的花哨元类”;c: 只要你想做框架支持的事情,你就很幸运,但要摆脱这种支持,即使只是一点点,也可能需要抵消魔法(这在一定程度上解释了为什么我更喜欢使用轻量级、透明的设置,比如werkzeug,而不是像Rails或Django那样给我施魔法的框架:我对深黑魔法的掌握并不意味着我很乐意在普通生产代码中使用它……但是,这是另一个讨论;-)。 |
|
|
2
3
在这种情况下(尽管我不是100%确定),问题在于Form类在类创建过程中做了什么。我认为它有一个元类,这个元类将在类创建期间完成表单初始化。这意味着您在类创建后添加的任何字段都将被忽略。 因此,您需要创建一个新类,就像使用type()语句一样,这样就涉及到了元类的类创建代码,现在是新字段。 |
|
|
3
1
值得注意的是,这段代码片段是达到预期目的的一种非常糟糕的方法,并且涉及到对Django Form对象的一个常见误解——Form对象应该与HTML表单一一映射。做这样的事情的正确方法(不需要任何元类魔法)是使用多个Form对象和 inline formset . 或者,如果出于某种奇怪的原因,你真的想把东西保存在一个Form对象中,只需在Form的__init__方法中操纵self.fields。 |