Bonjour,

En préambule, je débute dans l'utilisation de Django et de Python.

Mon problème est le suivant :
Je souhaite vérifier le contenu de 2 champs. Pour cela, j'ai rédigé un
ModelForm avec deux RegexField.
Puis j'ai écrit deux méthodes clean pour mes champs. Ca fonctionne comme
je veux.
Mais je me rends compte que mes méthodes sont presque identiques. Donc
DRY, j'ai essayé de créer une fonction plus généraliste que
j'utiliserai ensuite dans les clean. Et ça ne fonctionne pas.

Pourriez-vous m'apporter vos lumières et si nécessaire me rediriger vers
de la documentation pour m'améliorer ?

Merci d'avance pour votre aide.

[code]
from django.db import models
from django import forms
from django.forms import ModelForm
from django.core.exceptions import ValidationError

class Product(models.Model):
    name_product = models.CharField(max_length=300)
    ce_number = models.CharField(max_length=9)
    cas_number = models.CharField(max_length=12)

class ProductForm(forms.ModelForm):
    ce_number = forms.RegexField(regex=r'[0-9]{3}-[0-9]{3}-[0-9]{1}')
    cas_number = forms.RegexField(regex=r'[0-9]{3-7}-[0-9]{2}-[0-9]{1}')

    def check_number(c_number, modulo_n, reverse = False)
        """Function to validate a CAS or CE number"""
        c_number = self.cleaned_data['c_number']
        #je fais mes transformations et calculs
        if reverse == True:
            c_number_rest = ....%modulo_n
        else:
            c_number_rest = ....%modulo_n
        if c_number_rest != c_number_control
            raise forms.ValidationError("It's not a correct number.")
        return c_number

    def clean_ce_number(self):
        """Function to validate specifically CE number"""
        self.check_number(ce_number,11)

    def clean_cas_number(self):
         """Function to validate specifically CAS number"""
         self.check_number(cas_number,10,True)
[/code]
_______________________________________________
django mailing list
[email protected]
http://lists.afpy.org/mailman/listinfo/django

Répondre à