2012-06-07 20 views
13

Desidero estendere ModelForms con lo scopo principale di aggiungere campi al modulo. Penso che sia più facile vedere con un esempio:Sottoclassi di Django ModelForms

# 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') 

Potrebbe anche funzionare? O semplicemente cancellerebbe gli altri campi da BasicForm in SocialForm?

Qual è il modo corretto di farlo?

risposta

36

Questa è una risposta in ritardo, ma ho voluto sottolineare che è possibile creare una sottoclasse l'interno Meta classe come questa:

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

In questo modo non c'è bisogno di ripetere la definizione model = Business, e qualsiasi altro Meta gli attributi che è possibile aggiungere a BasicForm verranno automaticamente ereditati da SocialForm.

Per riferimento, ecco lo Django documentation su questo approccio.

Problemi correlati