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? На вашем коде я не вижу, что это нужно.