我想实现一个简单的 2 部分 FormWizard。表格 1 将动态生成如下内容:
class BuyAppleForm(forms.Form):
creditcard = forms.ChoiceField(widget = forms.RadioSelect)
type = forms.ChoiceField(widget = forms.RadioSelect)
def __init__(self,*args, **kwargs):
user = kwargs['user']
del kwargs['user']
super(BuyAppleForm, self).__init__(*args, **kwargs)
credit_cards = get_credit_cards(user)
self.fields['creditcard'].choices = [(card.id,str(card)) for card in credit_cards]
apple_types= get_types_packages()
self.fields['type'].choices = [(type.id,str(type)) for type in apple_types]
这将动态创建一个包含可用选项列表的表单。
我的第二种形式,我实际上不想输入。我只想显示一个确认屏幕,其中包含信用卡信息、苹果信息和金额(总额、税金、运费)。一旦用户点击确定,我希望苹果购买开始。
我能够通过在 kwargs 中传入 request.user 对象来实现单一形式的方式。但是,使用 FormWizard,我无法弄清楚这一点。
我是不是错误地处理了这个问题,FormWizard 不是正确的方法吗?如果是,Form__init__
方法如何从 HTTP 请求中访问用户对象?