2010-05-12 10 views
7

Qual è l'approccio migliore per estendere il modello del sito in django? Creazione di un nuovo modello e ForeignKey del sito o un altro approccio che mi consenta di creare una sottoclasse del modello del sito?Come estendi il modello Site in django?

Preferisco la sottoclasse, perché relazionalmente sono più a mio agio, ma sono preoccupato per l'impatto che avrà con l'Admin incorporato.

risposta

8

Ho appena utilizzato la mia sottoclasse di sito e creato un amministratore personalizzato per questo.

Fondamentalmente, quando si sottoclasse un modello in django crea FK che punta al modello principale e consente di accedere ai campi del modello padre in modo trasparente, allo stesso modo in cui si accede agli attributi della classe genitore in pyhon. L'amministrazione integrata non risentirà in alcun modo, ma dovrai annullare la registrazione di Sites ModelAdmin e registrare il tuo ModelAdmin.

+2

E queste cose? Funzionano ancora? http://docs.djangoproject.com/en/dev/ref/contrib/sites/#how-django-uses-the-sites-framework –

4

Se si desidera solo modificare il comportamento dell'oggetto, ma non aggiungere nuovi campi, è consigliabile utilizzare un "modello proxy" (nuovo in Django 1.1). È possibile aggiungere ulteriori metodi Python a modelli esistenti e altro:

Questo è ciò che l'ereditarietà del modello proxy è per: creare un proxy per il modello originale. È possibile creare, eliminare e aggiornare le istanze del modello proxy e tutti i dati verranno salvati come se si stesse utilizzando il modello originale (non proxy). La differenza è che puoi modificare elementi come l'ordinamento modello predefinito o il gestore predefinito nel proxy, senza dover modificare l'originale.

Ulteriori informazioni a the documentation.

+0

Sto cercando di aggiungere un nuovo campo; ma grazie per l'informazione. Molto utile a prescindere. –

1

È possibile avere un altro modello come SiteProfile che ha una relazione OneToOne con Site.