在CBV中将kwargs传递给Django中的Form

时间:2019-10-26 03:50:56

标签: django python-3.x

我有一个ModelForm,需要传入一个用户,以便可以更新查询集。我这样重写__init__的{​​{1}}方法:

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似乎都是空的。

These**kwargs的内置方法。

1 个答案:

答案 0 :(得分:1)

我真的不明白为什么您在这里也不使用FormView,因此您仍然可以覆盖get_form_kwargs;您确实根本不需要直接定义get(或post)。

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

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