2011-01-31 5 views
0

Lors de la création d'un formulaire, vous pouvez définir un ensemble de méthodes, clean_xyz, pour vous assurer que les données sont forcées au format correct. Y a-t-il un moyen de faire cela au niveau du modèle?Cohérence des données du modèle Django

Peut-être que je peux remplacer les régleurs de champ en quelque sorte? Je veux donc que si j'écris quelque chose comme

my_address.postal_code = 'a1b2c3' 

Il sera automatiquement mis en forme dans A1B 2C3. Peut-être lancer une exception si elle ne peut pas être convertie. De cette façon, je sais que je n'aurai jamais de données malformées dans la base de données.

Répondre

1

Peut-être que redéfinir save() sur votre modèle pourrait vous aider?

def save(self, *args, **kwargs): 
    # do your formatting 
    self.postal_code = somefancyformattingmethod() 
    # save it to the database 
    super(YourModel, self).save(*args, **kwargs) 
+0

Pas une mauvaise approche. Je n'ai pas pensé à le faire en sauvant. – mpen

3

Comme de Django 1.2, il y a a section in the docs that deal with the validation of models, je vous suggère de regarder Model.clean().

+0

Oh ... je ne savais pas qu'ils ont ajouté ça! Ils n'ont pas de méthodes 'clean_FIELD()' comme les formulaires le font, hein? Tant pis. Cela devrait fonctionner assez bien. Merci! – mpen

+0

En fonction des spécificités de votre situation, vous pouvez créer vos propres champs de modèle personnalisés et y ajouter une validation (cf http://stackoverflow.com/questions/1930469/django-custom-model-field-with-validation-how-to -hook-it-back-to-modelform). – lemonad

Questions connexes