Передача kwargs из CBV в форму в Джанго - PullRequest
0 голосов
/ 26 октября 2019

У меня есть ModelForm, для которого требуется передать пользователя, чтобы можно было обновить набор запросов. Я переопределяю __init__ метод ModelForm как таковой:

    def __init__(self, *args, **kwargs):
        #  override init to get user's casino's EmployeeType queryset
        self.user = kwargs.pop('user')
        print(self.user)
        super(MemoForm, self).__init__(*args, **kwargs)
        self.fields['receiver'].queryset = EmployeeType.objects.filter(
            casino=self.user.casino
        )

В View у меня есть get и post метод. Я пытаюсь передать **kwargs следующим образом:

class VideoUploadView(LoginRequiredMixin, View):
    """
    Display a form for uploading videos.
    """

    form_class = VideoUploadForm
    success_url = '/videos'
    template_name = 'videos/video_upload.html'

    def get(self, request, *args, **kwargs):
        form = self.form_class()
        return render(
            request, 
            self.template_name,
            {'form': form, 'user': self.request.user}
        )

В CreateView вы можете использовать метод get_form_kwargs для передачи **kwargs. Как это делается в обычном View? Должны ли мы использовать метод __init__? Показанный выше способ не работает, так как *args и **kwargs кажутся пустыми.

Эти являются встроенными методами View.

1 Ответ

1 голос
/ 26 октября 2019

Я не очень понимаю, почему вы не используете здесь FormView, так что вы все равно можете переопределить get_form_kwargs;вам действительно никогда не нужно определять get (или post) напрямую.

Но, тем не менее, ответ прост: вы просто передаете свои kwargs непосредственно в форму:

form = self.form_class(user=request.user)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...