Django: метод CBV form_valid() не вызывается

В моем CreateView класс я отменяю form_valid() функционировать следующим образом:

class ActionCreateView(CreateView):
    model = Action
    form_class = ActionCreateForm
    success_url = reverse_lazy('profile')

    def get_initial(self):
        initial = super(ActionCreateView, self).get_initial()
        initial['request'] = self.request
        return initial

    def form_valid(self, form):
        form.instance.user = self.request.user
        print 'user: %s'%form.instance.user
        try:
            da = form.cleaned_data['deadline_date']
            ti = datetime.now()
            form.instance.deadline = datetime(da.year, da.month, da.day, ti.hour, ti.minute, ti.second )
        except Exception:
            raise Http404
        return super(ActionCreateView, self).form_valid(form)

Но, как оказалось, form_valid метод никогда не вызывается, потому что user никогда не печатается. Интересно, что clean метод в forms.py вызывается.

Ошибка не отображается (поэтому у меня нет трассировки для отображения). Пользователь просто перенаправлен на форму снова.Что может быть причиной такого поведения? Я работаю на Django 1.5 и Python 2.7.

2 ответа

Вполне вероятно, что форма не действительна. Вы можете переопределить form_invalid() и посмотреть, вызывается ли это, или переопределить post() и посмотреть, какие данные отправляются POST.

form.instance.user = self.request.user не так

Пожалуйста, попробуйте этот вариант:

def form_valid(self, form):
    self.object = form.save(commit=False)  
    if self.request.user.is_authenticated():
        self.object.user = self.request.user
    # Another computing etc
    self.object.save()
    return super(ActionCreateView, self).form_valid(form)

PS Вам действительно нужно изменить get_initial? На вашем коде я не вижу, что это нужно.

Другие вопросы по тегам