0

フォームFormViewを継承するクラス ビューを実装しようとしています。私の問題は、私が試したContactUploadFormにrequest.userを追加する必要があることです:

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 をオーバーライドすれば、親メソッドの実装 (カプセル化) について知る必要がないため、get_form_kwargs をオーバーライドする方が理解しやすく簡単だと思います。

于 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 に答える