我想用当前登录的用户更新我的模型。我正在使用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,但得到了完全相同的错误。我可能做错了什么想法?
答案 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())