我想用当前登录的用户更新我的模型。我正在使用django-vanilla-views。为了存储新记录,我尝试使用CreateView。我不想在表单上显示用户,只需自动更新即可。
这是我的模型:
class Measurement(models.Model):
date = models.DateField()
user = models.ForeignKey(User)
这是我的看法:
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'
我还尝试为我的模型创建一个ModelForm,但是却出现了完全相同的错误。有什么想法我可能做错了吗?
您不需要将用户传递给表单,因此不必重写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 = self.request.user
obj.save()
return HttpResponseRedirect(self.get_success_url())
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句