2016-03-02 6 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. Вы уже исключили пользователя 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()) 
+0

Это отлично работает, спасибо! –

Смежные вопросы