2016-03-02 64 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

這很好,謝謝! –

相關問題