19

I want to extend ModelForms with the main purpose of adding fields to the form. I think it is easier to see with an example:

# Basic listing
class BasicForm(ModelForm):
    class Meta:
        model = Business
        fields = ('category', 'city', 'name', 'address', 
                'slogan', 'phone', 'website', 'email')

class SocialForm(BasicForm):
    class Meta:
        model = Business
        fields = ('facebook','twitter')

Would that even work? Or would it just wipe out the other fields from BasicForm in SocialForm?

What is the correct way of doing this?

4

1 に答える 1

46

Metaこれは遅い答えですが、次のように内部クラスをサブクラス化できることに注意したかったのです。

class SocialForm(BasicForm):
    class Meta(BasicForm.Meta):
        fields = BasicForm.Meta.fields + ('facebook', 'twitter')

そうすれば、定義を繰り返す必要がなくなり、追加する可能性のあるmodel = Business他の属性は によって自動的に継承されます。MetaBasicFormSocialForm

参考までに、このアプローチに関するDjango のドキュメントを次に示します。

于 2012-09-02T03:22:41.390 に答える