在子模型中继承get_absolute_url的问题

时间:2011-03-06 22:33:41

标签: django url model-inheritance

我有以下几组模型(为清晰起见缩写):

首先设置:

class Web(Link):
    ideas = models.ManyToManyField(Idea, blank=True, null=True)
    precedents = models.ManyToManyField(Precedent, blank=True, null=True)

    categories = GenericRelation(CategoryItem)

    @permalink
    def get_absolute_url(self):
       return ('resources-link-detail', [str(self.slug)])

这是一个孩子:

class Link(models.Model):
    title = models.CharField(max_length=250)
    description = models.TextField(blank=True)
    website = models.URLField(unique=True)
    slug = models.SlugField(unique_for_date='pub_date')
    ...

    @permalink
    def get_absolute_url(self):
        return ('link-detail', [str(self.slug)])

第二组

class ResourceOrganization(Organization):
    ideas = models.ManyToManyField(Idea, blank=True, null=True)
    precedents = models.ManyToManyField(Precedent, blank=True, null=True)

    categories = GenericRelation(CategoryItem)

    @permalink
    def get_absolute_url(self):
        return ('resources-org-detail', [str(self.slug)])

这是一个孩子:

class Organization(Contact):
    name = models.CharField(max_length=100)
    org_type = models.PositiveSmallIntegerField(choices=ORG_CHOICES)
    ...

    @permalink
    def get_absolute_url(self):
        return ('org-detail', [str(self.slug)])

这是一个孩子:

class Contact(models.Model):
    description = models.TextField(blank=True, null=True)
    address_line1 = models.CharField(max_length=250, blank=True)
    address_line2 = models.CharField(max_length=250, blank=True)
    slug = models.SlugField(unique=True)
    ...

    class Meta:
        abstract = True

“ResourceOrganization”模型正确地覆盖了get_absolute_url方法,并且正在添加“类别”泛型关系。

“Web”模型不是。

我无法弄明白为什么。非常感谢任何见解。

P.S。我意识到可能有更好的方法来实现这个功能,但是我暂时坚持使用它,直到我能够重构并希望它能够正常工作。

感谢。

1 个答案:

答案 0 :(得分:0)

如果其他人遇到此问题,请查看您在父模型上定义的任何自定义管理器。它们不会以您想象的方式继承到子模型。

http://docs.djangoproject.com/en/dev/topics/db/managers/#custom-managers-and-model-inheritance