Django,在网站包中覆盖模型的问题

时间:2013-09-13 12:02:29

标签: django oop model override

我在覆盖“站点”中包含的“站点”模型时出现问题。我的网站上有一个带有“站点”的表单,我需要显示站点的名称,而不是Site.domain,我是覆盖模型,将它路由到“Meta”类中的同一个DB表并得到错误,我不能理解,代码在这里:

型号:

@python_2_unicode_compatible
class Site(models.Model):

domain = models.CharField(_('domain name'), max_length=100)
name = models.CharField(_('display name'), max_length=50)
objects = SiteManager()

class Meta:
    db_table = 'django_site'
    verbose_name = _('site')
    verbose_name_plural = _('sites')
    ordering = ('domain',)

def __str__(self):
    return self.domain

def save(self, *args, **kwargs):
    super(Site, self).save(*args, **kwargs)
    # Cached information will likely be incorrect now.
    if self.id in SITE_CACHE:
        del SITE_CACHE[self.id]

def delete(self):
    pk = self.pk
    super(Site, self).delete()
    try:
        del SITE_CACHE[pk]
    except KeyError:
        pass

我的首要模式:

from django.contrib.sites.models import Site
from django.utils.translation import ugettext_lazy as _


class NamedSite(Site):
    def __str__(self):
        return self.name

class Meta:
    db_table = 'django_site'
    verbose_name = _('site')
    verbose_name_plural = _('sites')
    ordering = ('domain',)

和错误

DatabaseError at <my url>

ERROR:  Column django_site.site_ptr_id doesn't exist
LINE 1: ...ROM "django_site" INNER JOIN "django_site" T2 ON ("django_si...

1 个答案:

答案 0 :(得分:1)

对模型进行子类化是model inheritance的一个示例。无法“覆盖模型并路由到同一个db表”。

更好的方法是子类ModelChoiceField,并覆盖label_from_instance以根据需要显示网站实例。然后使用您的模型选择字段选择表单中的网站。