2010-05-12 93 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关系。