2012-04-21 8 views
2

私はこの1つのようなフォームにいくつかのカスタムエラーメッセージを追加しようとしていた中でユーザーフィールドにカスタムエラーメッセージを追加します。ジャンゴ1.4 - メタフィールドモデルとフォーム=ユーザー

class RegistrationForm(forms.ModelForm): 

    class Meta: 
     model = User 
     fields = ('email',) 

    extra_field = forms.CharField(error_messages={ 
     'required':'Este campo es requerido' 
    })  

私は、カスタムの追加問題はありません(extra_field)で宣言されているフィールドにエラーメッセージが表示されますが、モデルUserから継承したフィールドにカスタムエラーメッセージを追加する際に問題があります。metaクラス(email

本当に必要なのは、このフォームのすべてのエラーメッセージをカスタマイズすることです。また、英語ではなくスペイン語で表示したいと思います。

これまで、モデルユーザーから継承したフォームフィールドをカスタマイズする方法に関するドキュメントはありませんでしたが、エラーメッセージのために新しいフォームを作成する必要はありません。

事前に感謝します!

PD:私はDjango 1.4とPython 2.6.6をdebian squeezeボックスで使用しています。他の人と変わらないUserあなたsettings.py

USE_I18N = True 
LANGUAGE_CODE = 'es' 

モデルでは、内在上

+0

'error_messages' dictにカスタムエラーを追加するとどんなメリットがありますか?あなたは 'raise forms.ValidationError( '重要なメッセージ')' – San4ez

答えて

1

皆さん、お返事ありがとうございました。実際には、私は多くの手伝いをしました。私はこのフォーム持っている

Suposse:

class RegistrationForm(forms.ModelForm): 

    class Meta: 
    model = User 
    fields = ('username', 'email') 

をそして、私は、ユーザー名フィールドにカスタムエラーメッセージを追加したいが、私はすべてを失いたくない

は、私はこのような問題を解決しましたそのフィールドに既に含まれている検証。

は、私は私のRegistrationFormクラスにこのメソッドを追加しました:

def clean_username(self): 
    data = self.cleaned_data 

    # My extremely important validation. 
    if len(data['username']) == 5: 

     self.fields['username'].error_messages["myerror"] = "The important message" 
     raise forms.ValidationError(self.fields['username'].error_messages["myerror"]) 

    return data['username'] 

このaproachの利点は、私はすでに問題になっているフィールドが付属して、他の検証チェックを失うしていないということです。

これは重要なことです。ユーザーが既に自分のデータベースに存在することを確認する必要がないからです。

お返事ありがとうございました!

0

電源を入れます。問題を理解するためのコードを記述してください。 fields = ('email')はタプルやリストでなければなりませんあなたのメタクラスで 、すなわちfields = ('email',)

+0

こんにちはSan4ez、あなたの答えは非常にありがとう、私はメタクラスのフィールド値を固定し、国際化の問題は、しかし、私はまだドンコードをハックすることなくユーザーのモデルフォームをカスタマイズする方法を知っています。 – danielrvt

0

あなたは単にあなたがあなたの余分なフィールドを定義しているとまったく同じ方法でそれらを再定義することによって継承されたフィールドのいずれかをオーバーライドすることができます。

+0

このaproachの問題は、そのフィールドに付属しているすべての既存の検証ルールが失われることです。たとえば、フィールドのユーザー名を再定義するとします。そのユーザー名の一意性に関連するすべての検証を手動で提供する必要があります。 – danielrvt