我正在尝试将数据从views.py移动到我的forms.py页面。我正在使用FormWizard,但我认为这不重要。
views.py
def get_context_data(self, form, **kwargs):
context = super(CheckoutWizard, self).get_context_data(form=form, **kwargs)
kwargs = super(CheckoutWizard, self).get_form_kwargs()
def get_form_kwargs(self):
kwargs = super(CheckoutWizard, self).get_form_kwargs()
kwargs.update({'first_name': 'james'})
kwargs.update({'last_name': 'bond'})
form = CreditCardForm(kwargs)
return kwargs
forms.py - 在CreditCardForm
中def __init__(self, *args, **kwargs):
for a in args:
for key in a:
print("key: %s , value: %s" % (key, a[key]))
super(CreditCardForm, self).__init__(*args, **kwargs)
在上面的表单文件中,我使用嵌套循环访问* args中的数据,因为如果我调用args而没有*我得到这个
({'first_name': 'james', 'last_name': 'james'},)
我相信它是一个带有字典的元组。
我见过其他人正在使用** kwargs的其他解决方案。我目前的解决方案感觉有点hacky所以,如果有更正确或更简单的方式,这个id欣赏帮助。我也很奇怪,我在视图中添加了kwargs,但随后在args中访问了这些数据。任何关于差异的解释也将受到赞赏。
谢谢!
答案 0 :(得分:0)
def get_form_kwargs(self):
kwargs = super(CheckoutWizard, self).get_form_kwargs()
kwargs.update({'first_name': 'james'})
kwargs.update({'last_name': 'bond'})
# this will be called by cvb like form_class(**self.get_form_kwargs())
# because you miss ** so you get your kwargs in arg
# form = CreditCardForm(**kwargs)
return kwargs
def __init__(self, *args, **kwargs):
first_name = kwargs.pop('first_name')
last_name= kwargs.pop('last_name')
super(CreditCardForm, self).__init__(*args, **kwargs)