2011-07-18 11 views
1

私は1つのモデルと、このモデルを使用する3つの異なるフォームを持っています(もちろん、それぞれのフォームはこのモデルのフィールドが異なります)。私はいくつか書いてフォームフィルを有効にする機能を書きました...しかし、私は本当にすべてのフォームにこの検証をコピーして過去したいですか?Django - 共通のクリーニングデータ

共通のクリーニングクラスを1つ使用できますか?どうすればいいですか?あなたは1つのベースフォームクラスを持っていないのはなぜ

models.py

class UserProfile(models.Model):  

    user = models.ForeignKey(User, unique=True) 

    cpf = models.CharField('CPF', max_length=14, blank=True) 
    cnpj = models.CharField('CNPJ', max_length=18, blank=True) 

...

forms.py

class yyyyyForm(UserCreationForm): 
      ... 
      def Meta: 
       ... 
      def Save: 
       ... 
      def clean_cpf(self): 
       ... 

class xxxxxForm(UserCreationForm): 
    ... 
    def Meta: 
     ... 
    def Save: 
     ... 
    def clean_cpf(self): 
     ... 

答えて

3

:ここ

は、実際のコードですここでは、clean_cpf()メソッドを配置し、それを他のフォーム用に拡張します。また、clean_cpfは親フォームにあります子クラスに実装する必要はありません。

あなたの例では、UserCreationFormという基本クラスがあり、編集可能なフォームであれば、ここでクリーンメソッドを配置できます。

+0

これは最高のアイデアです。 http://djangosnippets.org/snippets/1228/の例がありますが、あなたのアイデアははるかに優れています。 – Thomas