Domanda

Prima di oggi, ho usato Django 1.1. Per garantire Sto stare al passo con i tempi, ho deciso di aggiornare il mio ambiente di Django Django utilizzare 1.2.3. Purtroppo, ho incontrato un problema.

Il codice seguente non ha sollevato un ValueError in 1.1:

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

Tuttavia, ora che ho aggiornato, solleva un ValueError ogni volta. Ho un campo SSN che sto presentando come parte della mia forma e togliere i trattini prima di fare una) chiamata (instance.save. Purtroppo, il ValueError verifica perché Django pensa che il mio valore SSN è troppo lungo (si aspetta 9 caratteri ed è la ricezione di 11 - 123-45-6789)

.

Ho guardato attraverso la documentazione Django e non riuscivo a trovare qualsiasi cosa relativa a questo cambiamento. Qualche idea di cosa sta succedendo? Ho sempre pensato che lo scopo del parametro "commit = False" è stato quello di consentire la pre-elaborazione dei dati prima di salvare le informazioni.

mi sto perdendo qualcosa?

È stato utile?

Soluzione

Secondo le 1.2 Docs del save() metodo , "Se si chiama save () con commit = false, allora verrà restituito un oggetto che non è ancora stato salvato nel database." Quindi io non sono sicuro perché ci sarebbe stato un cambiamento in termini di funzionalità, ma è possibile che in 1.1 validazione / codice di controllo ha funzionato solo quando un oggetto è stato salvato nel database, e in 1,2 succede in precedenza (prima che l'oggetto viene salvato) .

In ogni caso, se siete i dati di pulizia che viene immesso in una forma, si dovrebbe probabilmente essere la pulizia nel FormClass:

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

Questo dovrebbe almeno risolvere il problema ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top