1

我在覆盖包含在站点框架叉中的模型“站点”时遇到问题。我的站点上有一个带有“站点”的表单,我需要显示站点的名称,而不是 Site.domain,我覆盖模型,将其路由到“元”类中的同一个数据库表并得到错误,我不能明白了,代码在这里:

模型:

@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...
4

1 回答 1

1

子类化模型是模型继承的一个例子。无法“覆盖模型并路由到同一个数据库表”。

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

于 2013-09-13T20:08:18.700 回答