Проблема наследования get_absolute_url в дочерней модели - PullRequest
0 голосов
/ 07 марта 2011

У меня есть следующие наборы моделей (для ясности сокращенно):

Первый набор:

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 голосов
/ 07 марта 2011

Если кто-то еще сталкивается с этой проблемой, взгляните на любые пользовательские менеджеры, которые вы определили в родительской модели.Они не наследуют дочернюю модель так, как вы думаете.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...