在django vanilla CreateView上设置当前用户

时间:2016-03-02 15:41:50

标签: python django django-views

我想用当前登录的用户更新我的模型。我正在使用django-vanilla-views。要存储新记录,我尝试使用CreateView。我不想在表单上显示用户,只需自动更新。

这是我的模特:

class CreateMeasurement(CreateView):
    model = Measurement
    fields = ['date']
    success_url = reverse_lazy('list_measurements')

    def get_form(self, data=None, files=None, **kwargs):
        kwargs['user'] = self.request.user
        return super(CreateMeasurement, self).get_form(data=data, files=files, **kwargs)

以下是我的观点:

TypeError: __init__() got an unexpected keyword argument 'user'

不幸的是,在访问视图时,我得到以下异常:

TextView mText = (TextView) findViewById(R.id.yourtextviewid);
for (int i=0; i<jokeList.size();i++) {   
   mText.setText(jokeList.get(i));
}

我也尝试为我的模型创建一个ModelForm,但得到了完全相同的错误。我可能做错了什么想法?

1 个答案:

答案 0 :(得分:2)

您不需要将用户传递给表单,因此请勿覆盖get_form。您已通过在视图中设置field从模型表单中排除了用户fields,因此您也不需要自定义模型表单。

覆盖form_valid方法应该足够,并在保存表单时设置用户。

from django.http import HttpResponseRedirect

class CreateMeasurement(CreateView):
    model = Measurement
    fields = ['date']
    success_url = reverse_lazy('list_measurements')

    def form_valid(self, form):
        obj = form.save(commit=False)
        obj.user = request.user
        obj.save()
        return HttpResponseRedirect(self.get_success_url())