2016-03-02 30 views
3

我想用当前登录的用户更新我的模型。我正在使用django-vanilla-views。要存储新记录,我试图使用CreateView。我不想在窗体上显示用户,只需自动更新。在django vanilla上设置当前用户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,但得到完全相同的错误。任何想法我可能做错了什么?

回答

2

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

它应该足以覆盖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()) 
+0

这很好,谢谢! –

相关问题