Question

Avant aujourd'hui, je me sers de Django 1.1. Pour assurer je garde avec le temps, j'ai décidé de mettre à jour mon environnement Django utiliser Django 1.2.3. Malheureusement, je l'ai rencontré un problème.

Le code suivant ne soulevaient ValueError en 1.1:

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

Cependant, maintenant que je l'ai mis à jour, il soulève un ValueError chaque fois. J'ai un champ que je SSN présenter dans le cadre de ma forme et je bande les tirets avant de faire un appel instance.save (). Malheureusement, le ValueError se produit parce que Django pense ma valeur est trop long SSN (il est attendre 9 caractères et il a reçu 11 - 123-45-6789)

.

Je l'ai regardé à travers la documentation de Django et je ne pouvais pas trouver tout ce qui concerne ce changement. Toute idée de ce qui se passe? Je l'ai toujours pensé que le but du paramètre « commit = False » était de permettre une pré-traitement des données avant d'enregistrer les informations.

Am quelque chose que je manque?

Était-ce utile?

La solution

Selon les 1.2 docs sur le save() méthode , « Si vous appelez save () avec commit = False, il retournera un objet qui n'a pas encore été enregistré dans la base de données. » Donc, je ne sais pas pourquoi il y aurait eu un changement de fonctionnalité, mais il est possible que 1.1 code de validation / contrôle couru que lorsqu'un objet a été enregistré dans la base de données, et 1.2, il arrive plus tôt (avant que l'objet est enregistré) .

Dans tous les cas, si vous les données de nettoyage qui est saisi dans un formulaire, vous devriez probablement ce nettoyage dans le FormClass:

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

Cela devrait au moins résoudre le problème ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top