2016-07-01 5 views
0

У меня есть модель, где одно из обязательных полей - это пользователь, который в настоящий момент подписан. Я делаю следующее при создании новой записи для модели:Установка текущего пользователя для поля требуемой модели

views.py

def post(self, request): 
    bound_form = self.form_class(request.POST) 
    if bound_form.is_valid(): 
     new_position = bound_form.save() 

Проблема заключается в том, что это работает только когда пользователь выбрал их сам по форме. Мне нужен способ установить текущего пользователя автоматически и просто не отображать поле пользователя в форме. Я попытался это:

def post(self, request): 
    bound_form = self.form_class(request.POST) 
    if bound_form.is_valid(): 
     new_position = bound_form.save(commit=False) 
     new_position.user = request.user 
     new_position.save() 

Однако это не работает, потому что bound_form не является действительной, поскольку она отсутствует у пользователя, который является обязательным полем на модели. Где еще можно установить пользователя, прежде чем пытаться сохранить форму? В шаблоне или методе get представления?

+2

Вы должны сделать именно то, что вы сделали, за исключением того, что вам необходимо исключить поле пользователя из формы в первую очередь. –

+0

Im не уверен, что я следующий. В настоящее время я показываю только те поля, которые я хочу, чтобы пользователь заполнил (т. Е. Я удалил поле пользователя). Другими словами, ... все работает, если пользователь сам выбирает себя, но если я удалю поле, чтобы они не могли выбрать себя, я не могу сохранить форму даже с указанным выше кодом. – darkpool

+2

Вы должны использовать 'exclude = ('user',)' в 'class Meta:' вашей 'формы' – trantu

ответ

2

Вы должны использовать exclude=('user',) в class Meta: вашего form. @ Даниэль Роземан также прав.