我有一个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
的内置方法。
答案 0 :(得分:1)
我真的不明白为什么您在这里也不使用FormView,因此您仍然可以覆盖get_form_kwargs
;您确实根本不需要直接定义get
(或post
)。
但是,答案很简单:您只需将kwargs直接传递给表单:
form = self.form_class(user=request.user)