因此,我的目标是能够过滤ModelForm中的ModelChoiceField查询集,以仅包含request.user创建的地方。将request.user对象从Django中基于类的通用视图发送到ModelForm
我的ModelForm很简单:
class PlaceEventForm(models.ModelForm):
class Meta:
model = Event
我希望能够添加类似:
def __init__(self, *args, **kwargs):
super(PlaceEventForm, self).__init__(*args, **kwargs)
self.fields['place'].queryset = Place.objects.filter(created_by=request.user)
不过,我似乎无法找到一种方法来访问请求在ModelForm中。
我的观点是,像这样:
class PlaceEventFormView(CreateView):
form_class = PlaceEventForm
template_name = 'events/event_create.html'
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(PlaceEventFormView, self).dispatch(*args, **kwargs)
我不知道这是否是甚至接近我应该做的,但我想:
def get_form_kwargs(self):
kwargs = super(PlaceEventFormView, self).get_form_kwargs()
kwargs.update({'place_user': self.request.user})
return kwargs
但我得到的错误: init()得到了一个意想不到的关键字参数'place_user'
对此有何意见?或者任何人都可以想象一种方法来过滤视图中的ModelChoiceField,而无需将我的请求传递给ModelForm?
非常感谢!完美的作品。 – Brian 2011-04-27 18:13:43
无法理解你如何做到这一点。 – 2013-07-21 02:34:29
我完成了这个例子,让我知道如果它仍然不清楚 – 2013-07-22 11:57:48