我有Formwith a ModelChoiceField,它被用作form_classa 中的the FormView。
选择字段必须填充与request对象绑定的信息。
我们总结一下:
class MyFormView(FormView):
# I need to pass `request.user` and a value
# derived from `request.GET['pk']` to the form
form_class = MyForm
class MyForm(Form):
choices = ModelChoiceField(queryset=MyChoice.objects.none())
def __init__(self, user, number, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields['choices'] = MyChoice.objects(number=number, owner=user)
Run Code Online (Sandbox Code Playgroud)
创建实例时,我需要做什么才能将该数据传递到表单?
我尝试覆盖,get_form但我不确定这是执行此操作的正确方法:
def get_form(self, form_class):
user = self.request.user
number = SomeModel.objects.get(self.GET['pk']).number
return form_class(user, number, **self.get_form_kwargs())
Run Code Online (Sandbox Code Playgroud)
覆盖get_form可以,但更好的方法是覆盖get_form_kwargs,这样您就不必从get_form方法中复制代码。
class MyFormView(FormView):
form_class = MyForm
def get_form_kwargs(self):
kwargs = super(MyFormView, self).get_form_kwargs()
kwargs['user'] = self.request.user
kwargs['number'] = SomeModel.objects.get(self.GET['pk']).number
return kwargs
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2333 次 |
| 最近记录: |