Frage

Vor heute, ich habe mit Django 1.1. Um sicherzustellen, dass ich mit der Zeit Schritt zu halten, habe ich beschlossen, meine Django-Umgebung zu aktualisieren Django 1.2.3 zu verwenden. Leider, ich habe ein Problem aufgetreten.

Der folgende Code hat ein Valueerror in 1.1 nicht erhöhen:

        instance = FormClass(
            request.POST,
            instance=existing_instance
        ).save(commit=False)

Jetzt aber, dass ich umgestellt haben, wirft es ein Valueerror jedes Mal. Ich habe ein SSN Feld, dass ich als Teil meiner Form bin einreichen und ich die Striche vor abzustreifen, um eine instance.save tun () -Aufruf. Leider tritt der Valueerror weil Django meines SSN Wert denkt, zu lang ist (es wird erwartet, 9 Zeichen und es empfängt 11 - 123-45-6789)

.

Ich habe durch die Django docs sehe und ich kann nichts auf diese Änderung im Zusammenhang finden. Jede Idee, was los ist? Ich habe immer gedacht, den Zweck der „commit = False“ Parameter vor dem Speichern der Informationen Vorverarbeitung von Daten zu ermöglichen war.

Bin ich etwas fehlt?

War es hilfreich?

Lösung

Nach den 1.2 docs auf der save() Methode : „Wenn Sie mit commit save () aufrufen = false, dann wird es ein Objekt zurückgeben, das noch nicht in der Datenbank gespeichert wurden.“ Also ich bin nicht sicher, warum es eine Änderung hat in Funktionalität würde, aber es ist möglich, dass in 1.1 Validierung / Check-Code nur lief, wenn ein Objekt in die Datenbank gespeichert wurde, und in 1.2 kommt es früher (vor dem Objekt gespeichert) .

Auf jedem Fall, wenn Sie Reinigungs Daten, die in einem Formular eingegeben wird, sollten Sie es wahrscheinlich in den Formularklassen Reinigung werden:

def clean_ssn(self):
    data = re.sub(r'[^0-9]','',self.cleaned_data['ssn'])
    #validation code here
    return data

Das sollte zumindest das Problem beheben ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top