从站点地图的模型覆盖get_absolute_url

时间:2013-04-18 01:55:25

标签: django models subclassing sitemap.xml

嘿,我有一个可以通过2个不同的网址(取决于域名)加入的模型。我在视图和模板中使用它们没有问题。

在构建站点地图时,get_absolute_url不应该返回相同的内容,所以我想:我可以继承模型并覆盖get_absolute_url方法:

class FanpitConcert(BandtasticConcert):
    def get_absolute_url(self):
        return ('event_checkout',(),{'artist_slug':self.slug_name,
                                     'year': self.get_date().year,
                                     'month': self.get_date().month,
                                     'day': self.get_date().day,
                                    })
    class Meta:
        abstract = True

然后将此子类化模型用于站点地图类

class ConcertsSiteMap(Sitemap):
    def items(self):
        return FanpitConcert.objects.all().filter(app='Fanpit')

但是当我访问/sitemap.xml时,django仍然从原始模型调用get_absolute_url

这里有魔法django吗?还是我错过了一些明显的东西?

更新

我尝试删除abstract = True部分并继续使用     类Meta:         db_table ='same_table_as_base_model'

但现在django抱怨找不到专栏。

1 个答案:

答案 0 :(得分:1)

在这种情况下,最好使用代理模型,而不是抽象。

所以子类模型会有

class Meta:
    proxy = True

有关代理模型here的更多信息。