2010-05-12 122 views
7

在django中擴展Site模型的最佳方法是什麼?創建一個新的模型和ForeignKey的網站或另一種方法,讓我繼承網站模型?如何在django中擴展Site模型?

我更喜歡子類化,因爲在關係上我更舒適,但我擔心它對內置Admin具有的影響。

回答

8

我剛剛使用了我自己的網站的子類,併爲它創建了一個自定義管理員。

基本上,當你在django中創建一個模型時,它會創建指向父模型的FK,並允許透明地訪問父模型的字段 - 就像訪問pyhon中父類的屬性一樣。 內置管理員不會受到任何影響,但您必須取消註冊Sites ModelAdmin並註冊您自己的ModelAdmin。

+2

這些事情呢?他們還在工作嗎? http://docs.djangoproject.com/en/dev/ref/contrib/sites/#how-django-uses-the-sites-framework – 2010-05-13 02:30:28

4

如果您只想更改對象的行爲,但不添加任何新字段,則應考慮使用「代理模型」(Django 1.1中的新增功能)。您可以將額外的Python方法添加到現有模型中,以及更多:

這是代理模型繼承的用途:爲原始模型創建代理。您可以創建,刪除和更新代理模型的實例,並將所有數據保存爲您正在使用原始(非代理)模型。不同之處在於,您可以在代理中更改默認模型順序或默認管理器等內容,而無需更改原始內容。

瞭解更多the documentation

+0

我期待添加新字段;但感謝您的信息。非常有用,無論。 – 2010-05-17 19:03:06

1

您可以有另一個模型,如SiteProfile,它與Site有OneToOne關係。