In meiner CreateView
Klasse namens ich das Überschreiben der form_valid()
Funktion wie folgt:Django: CBV Methode form_valid() nicht
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)
Aber es stellt sich heraus, die form_valid
Methode wird aufgerufen, nie, weil die user
nie gedruckt wird . Interessanterweise wird die Methode clean
in forms.py aufgerufen.
Es wird kein Fehler angezeigt (daher habe ich kein Traceback zur Anzeige). Der Benutzer wird einfach erneut zum Formular weitergeleitet. Was könnte der Grund für dieses Verhalten sein? Ich laufe auf Django 1.5 und Python 2.7.
Haben Sie eine print-Anweisung innerhalb der 'form_invalid'-Methode versucht und verwenden Sie' POST'? –
Erstellen der 'Form_invalid' Methode offenbarte das Problem. Danke für den Vorschlag. Wenn Sie Ihren Kommentar als Antwort schreiben, stimme ich gerne zu und stimme ihn ab. Vielen Dank. – neurix
Ich stieß auf ein ähnliches Problem, und 'form_invalid' half mir auch. Ich erkannte, dass das Formular einen Fehler darstellte, den ich in der Vorlage nicht berücksichtigte, sodass es nicht angezeigt wurde. Ist das ähnlich wie bei @neurix? –