Предварительный просмотр формы Django - добавление пользователя в форму перед сохранением - PullRequest
7 голосов
/ 09 марта 2009
class RegistrationFormPreview(FormPreview):
    preview_template    = 'workshops/workshop_register_preview.html'
    form_template       = 'workshops/workshop_register_form.html'

    def done(self, request, cleaned_data):
        # Do something with the cleaned_data, then redirect
        # to a "success" page. 
        # data = request.POST.copy()
        # data['user_id'] = u'%s' % (request.user.id)
        # cleaned_data['user'] = u'%s' % (request.user.id)
        #f = self.form(cleaned_data)
        #f = self.form(data)
        #f.user = request.user


        f = self.form(request.POST)
        f.save()

        pdb.set_trace()
        return HttpResponseRedirect('/register/success')

Как видите, я пробовал несколько способов, которые были закомментированы. Задача, очевидно, проста: добавить пользователя из запроса в форму перед сохранением, а затем сохранить.

Какой здесь принят метод работы?

1 Ответ

12 голосов
/ 09 марта 2009

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

В любом случае, с использованием аргумента commit для предотвращения немедленного сохранения результирующего объекта должно работать (при условии FormPreview использует ModelForm):

obj = form.save(commit=False)
obj.user = request.user
obj.save()
...