获取请求对象的Django类视图问题

时间:2013-06-24 09:07:01

标签: django django-class-based-views

我尝试实现一个继承 FormView 形式的类视图。我的问题是我需要将 request.user 添加到 ContactUploadForm 我尝试过:

ContactUploadForm(request.user) and ContactUploadForm(self.request.user)

但是,我如何获得请求?我不明白这些是如何运作的。

class ImportFromFile(FormView):
    """
    Class view import that allows a user to upload a single file (CSV, Excel) of contacts to a group.
    Inherits :FormView: - A view for displaying a form, and rendering a template response.
    """
    template_name = 'contacts/import_file.html'
    form_class = ContactUploadForm(request.user)

3 个答案:

答案 0 :(得分:3)

类似的东西:

class ImportFromFile(FormView):
    ...

    def get_form_kwargs(self):
        kwargs = super(ImportFromFile, self).get_form_kwargs():
        kwargs.update({
            'user': self.request.user
            ...
        })
        # or if you want to set only user
        # kwargs['user'] = self.request.user
        return kwargs
    ...

更新: 您应该覆盖get_form_kwargs方法。

您还可以覆盖get_form:

def get_form(self, form_class):
    kwargs = self.get_form_kwargs()
    kwargs.update({
            'user': self.request.user
            ...
    })
    # or if you want to set only user
    # kwargs['user'] = self.request.user
    return form_class(**kwargs)

但我认为重写get_form_kwargs更容易理解和简单,因为如果你覆盖get_form,你不需要知道父方法(封装)的实现。

答案 1 :(得分:1)

你也可以使用大括号mixins:

http://django-braces.readthedocs.org/en/latest/index.html#userformkwargsmixin

这样可以省去为每个需要访问用户信息的视图/表单重复内容的麻烦。

答案 2 :(得分:-1)

你不能在班级做到这一点。基于表单的视图定义了您可以覆盖的get_form方法,您可以在其中以self.request的形式访问请求。