5

管理者で検証する前にフィールドに入力したい。

models.py

class Ad(models.Model):
    .....
    manual_code  = models.BooleanField("Manual Code", default=False)
    code          = models.TextField("Code")

admin.py

class MyAdAdminForm(forms.ModelForm):
    class Meta:
        model = Ad

    def clean(self):
        cleaned_data = self.cleaned_data
        cleaned_data['code'] = "dadad"
        print cleaned_data
        return cleaned_data

class AdAdmin(admin.ModelAdmin):
    form = MyAdAdminForm

admin.site.register(Ad, AdAdmin)

最終的にはその「コード」フィールド全体を生成したいのですが、シェルでその値(「ダダッド」)を見ることができますが、フィールドが空であるというエラーが管理者に表示されます。

私も試しました

def clean_code(self):

そして、その関数をまったく呼び出していませんでした。

そして私も試しました

def save_model(request,....):

AdAdmin クラスで呼び出されましたが、それも呼び出されていませんでした。

それで、私は何をすべきですか?

4

1 に答える 1

2

カスタムメソッドを呼び出すだけでなくclean、Djangoは各フォームフィールドを個別に検証します。必要なフィールドエラーを引き起こしているのは、個々のフィールドチェックです。詳細については、フォームとフィールドの検証に関するDjangoのドキュメントを参照してください。

コードフィールドにユーザー入力を必要としない場合は、フォームの__init__メソッドをオーバーライドして、を設定できますrequired=False

class MyAdAdminForm(forms.ModelForm):
    class Meta:
        model = Ad

    def __init__(self, *args, **kwargs):
        super(MyAdAdminForm, self).__init__(*args, **kwargs)
        self.fields['code'].required = False

フィールドが不要になると、フォームは検証中にメソッド呼び出すclean_codeため、そこで値を設定できます。

于 2012-05-17T10:18:08.997 に答える