0

私のDjangoアプリでは、モデル(Mymodelと呼びましょう)とフォームを使用しています:

class Mymodel(models.Model):
    firstField(...)
    secondField(...)

class MymodelAddform(ModelForm):
    def clean_firstField(self):
        #stuff

    def clean_secondField(self):
        #stuff again

    def clean(self):
        #performs stuff with all the fields

    class Meta:
        model = Mymodel

MymodelEditformここで、 Mymodel に基づいて、 のみを使用してsecondFieldsecondField検証のみを使用して、別のフォーム を追加したいと思います。

私が検討した2つのオプション(どちらも私が書いたようには機能しません):

class MymodelEditform(ModelForm):
    class Meta:
        model = Mymodel
        fields = ['secondField']

ここでの問題は、clean_secondField再定義しない限り呼び出されないことです。別の場所で定義された別のメソッドを呼び出すことは避けたいと思いclean_secondFieldます (ただし、それが唯一のオプションである場合は、それで構いません)。

class MymodelEditform(MymodelAddform):
    class Meta:
        model = Mymodel
        fields = ['secondField']

ここでの問題は、 clean() 検証が呼び出されることです。フィールドのサブセットのみを使用しているため、失敗します。

問題は非常に明白です。どうすれば意図したとおりに機能させることができますか?

4

2 に答える 2

0

明らかな解決策は、 で定義clean_secondFieldして を継承さMymodelEditformせることですが、期待どおりに動作しない可能性があります。もう 1 つの解決策は、clean_secondField を定義する共通の基本フォームから両方のフォームを継承させることです。MyModelAddFormMymodelEditForm

または、フォームのメタのフィールドを明示的に除外することもできます ( https://code.djangoproject.com/ticket/12901を参照) 。

于 2013-04-17T13:03:18.730 に答える