0

我试图实现一个继承表单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)
4

3 回答 3

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,你不需要知道父方法的实现(封装)。

于 2013-06-24T09:21:34.597 回答
1

您还可以使用大括号 mixins :

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

这将使您免于为需要访问用户信息的每个视图/表单重复内容的麻烦。

于 2013-06-24T11:30:41.213 回答
-1

你不能在课堂上做到这一点。基于表单的视图定义了get_form一种您可以覆盖的方法,您可以在其中以self.request.

于 2013-06-24T09:16:17.010 回答