繁体   English   中英

将 kwargs 从 CBV 传递到 Django 中的 Form

[英]Passing kwargs from CBV to Form in Django

我有一个ModelForm需要一个用户传入,以便可以更新查询集。 我正在重写ModelForm__init__方法,如下所示:

    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的内置方法。

我真的不明白为什么你在这里也不使用 FormView ,所以你仍然可以覆盖get_form_kwargs 你真的不应该直接定义get (或post )。

但是,答案很简单:您只需将您的 kwargs 直接传递给表单:

form = self.form_class(user=request.user)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM