相关疑难解决方法(0)

从Django中基于类的通用视图向ModelForm发送request.user对象

因此,我的目标是能够在ModelForm中过滤ModelChoiceField查询集,只包含request.user创建的Places.

我的ModelForm很简单:

class PlaceEventForm(models.ModelForm):
    class Meta:
        model = Event
Run Code Online (Sandbox Code Playgroud)

我希望能够添加如下内容:

def __init__(self, *args, **kwargs):
    super(PlaceEventForm, self).__init__(*args, **kwargs)
    self.fields['place'].queryset = Place.objects.filter(created_by=request.user)
Run Code Online (Sandbox Code Playgroud)

但是,我似乎找不到在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)
Run Code Online (Sandbox Code Playgroud)

我不确定这是否接近我应该做的,但我试过:

def get_form_kwargs(self):
    kwargs = super(PlaceEventFormView, self).get_form_kwargs()
    kwargs.update({'place_user': self.request.user})
    return kwargs
Run Code Online (Sandbox Code Playgroud)

但是我得到了错误:init()得到了一个意外的关键字参数'place_user'

关于这个的任何想法?或者,任何人都可以想到一种方法来过滤我的ModelChoiceField在视图中,而无需将我的请求传递给ModelForm?

django django-forms django-class-based-views

15
推荐指数
1
解决办法
5991
查看次数

如何在CreateView中覆盖表单字段

在模型形式中,我可以覆盖表单字段

class waypointForm(forms.ModelForm):
    def __init__(self, user, *args, **kwargs):
        super(waypointForm, self).__init__(*args, **kwargs)
        self.fields['waypoints'] = forms.ModelChoiceField(queryset=Waypoint.objects.filter(user=user))
Run Code Online (Sandbox Code Playgroud)

如何在基于类的视图中使用相同的功能CreateView,以便我可以覆盖表单字段?

我试过get_form_kwargsget_form,但一切都是徒劳.我需要创建一个模型表单吗?

django

5
推荐指数
2
解决办法
4048
查看次数