Django如何知道呈现表单字段的顺序?
如果我有Django表单,例如:
class ContactForm(forms.Form): subject = forms.CharField(max_length=100)
message = forms.CharField()
sender = forms.EmailField()
我调用了这种形式的实例的as_table()方法,Django将按照上述指定的顺序渲染字段。
我的问题是Django如何知道类变量的定义顺序?
(例如,当我想从类的init方法中添加字段时,如何覆盖此顺序?)
回答:
我继续回答了自己的问题。这是供将来参考的答案:
在Django form.py
中,使用该__new__
方法将类变量最终self.fields
按类中定义的顺序加载到其中,这确实有些不可思议。 self.fields
是Django SortedDict
实例(在中定义datastructures.py
)。
因此,要覆盖此内容,请在我的示例中说,你希望发送者优先,但需要在init方法中添加它,你可以这样做:
class ContactForm(forms.Form): subject = forms.CharField(max_length=100)
message = forms.CharField()
def __init__(self,*args,**kwargs):
forms.Form.__init__(self,*args,**kwargs)
#first argument, index is the position of the field you want it to come before
self.fields.insert(0,'sender',forms.EmailField(initial=str(time.time())))
以上是 Django如何知道呈现表单字段的顺序? 的全部内容, 来源链接: utcz.com/qa/423977.html