我有一个使用request对象的表单:
class FooForm(forms.ModelForm):
class Meta:
model = Foo
fields = ('title', )
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request')
super().__init__(*args, **kwargs)
在我看来,无论何时要示例化表单,只要执行以下操作就很简单:
class FooCreateView(LoginRequiredMixin, CreateView):
model = Foo
form_class = FooForm
def get_form_kwargs(self):
kwargs = super(FooCreateView, self).get_form_kwargs()
kwargs.update({'request': self.request})
return kwargs
现在,我想在管理面板中使用相同的表单,因此我执行以下操作:
class FooAdmin(admin.ModelAdmin):
form = FooForm
但是嘣!它死了:
KeyError at /admin/foo/foo/add/
'request'
我尝试了以下操作,但没有成功
def get_form(self, request, *args, **kwargs):
form = super(FooAdmin, self).get_form(request, *args, **kwargs)
form.request = request
kwargs['request'] = request
return form
总而言之,是否有办法将请求传递到管理表单?
2条答案
按热度按时间xdnvmnnf1#
get_form()
方法只返回类,而不是它的示例。表单的示例化隐藏在ModelAdmin
的add_view
和change_view
方法中。您可以通过在get_form
方法中创建一个新的表单类来解决这个问题:另外,如果您只是在保存过程中需要访问权限,您可能还可以查看模型管理员的
save_form
和save_model
方法。b1zrtrql2#
对我有用!我可以像
self.request
一样访问Form示例中的request