【问题标题】:Django, problems with overriding model in sites packagesDjango,站点包中覆盖模型的问题
【发布时间】:2013-09-13 12:02:28
【问题描述】:

我在覆盖包含在站点框架叉中的模型“站点”时遇到问题。我的站点上有一个带有“站点”的表单,我需要显示站点的名称,而不是 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...

【问题讨论】:

    标签: django oop model overriding


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      • 2018-03-07
      • 2018-10-07
      • 1970-01-01
      • 2017-01-01
      相关资源
      最近更新 更多