3

これは Django 固有のものであるはずですが、とにかく Python だと思います。

基本的に、継承しているクラス (モデル クラスである可能性があります) で元のメソッドの動作をオーバーライドしたくありませんが、追加の検証を追加したいと考えています。これは可能ですか?ヒントはありますか?

class MyUserAdminForm(forms.ModelForm):
    class Meta:
        model = User

    def clean(self):
        // do some additional work even though it's cleaned by parent's clean method
4

2 に答える 2

5

スーパークラスのcleanメソッドを呼び出します。

def clean(self): 
    super(MyUserAdminForm, self).clean()
    # more cleaning

これは、何かをサブクラス化して機能を再定義するが、スーパークラスの機能を維持したい場合に行う一般的なPythonのことです。インスタンスを設定するためにスーパークラスコンストラクターが呼び出されることを常に確認する必要があるため、initメソッドを実行する場合は非常に一般的です。

于 2012-07-08T19:04:50.437 に答える
0
class ContactForm(forms.Form):
        message = forms.CharField()
        def clean_message(self):
                num_words = len(message.split())
                if num_words<4:
                        raise forms.ValidationError("Too short a message!")
                return message 

これは、フィールドに検証メソッドを追加する方法であり、これにより、デフォルトのクリーンアップが確実に実行されます。デフォルトのクリーンアップメソッドを再度呼び出す必要はありません。

出典:www.djangobook.com

使い方:

フォームオブジェクトでis_valid()が呼び出されると、システムはクラス内でclean_で始まり、属性名で終わるメソッドを探します。含まれている場合は、デフォルトのクリーンアップメソッドを実行した後に実行されます。

于 2012-07-08T19:20:49.550 に答える