“帐户”对象没有属性“get_absolute_url”

时间:2011-02-20 20:15:47

标签: django sitemap

尝试访问我的sitemap.xml时,我收到此错误:

'Account' object has no attribute 'get_absolute_url' on line 112.

109.    def get_absolute_url(self):
110.        if self.group is None:
111.            return reverse('wiki_article', args=(self.title,))
112.        return self.group.get_absolute_url() + 'wiki/' + self.title

我在追溯中找不到这个'帐户'对象。我在这里没有进口东西吗?如果您需要更多信息,请与我们联系。

2 个答案:

答案 0 :(得分:2)

您必须定义该方法。

<强> get_absolute_url

Model.get_absolute_url()

定义一个get_absolute_url()方法,告诉Django如何计算对象的规范URL。对于调用者,此方法应该返回一个字符串,该字符串可用于通过HTTP引用该对象。

例如:

def get_absolute_url(self):
    return "/people/%i/" % self.id

虽然这段代码是正确和简单的,但它可能不是编写这种方法的最便携方式。 reverse()函数通常是最好的方法。

例如:

def get_absolute_url(self):
    from django.core.urlresolvers import reverse
    return reverse('people.views.details', args=[str(self.id)])

参考:https://docs.djangoproject.com/en/1.9/ref/models/instances/

答案 1 :(得分:1)

我从来没有使用它,或者这个wiki应用程序,但听起来你的Account模型没有get_absolute_url方法。

http://docs.djangoproject.com/en/dev/ref/contrib/sitemaps/#django.contrib.sitemaps.Sitemap.location

  

如果没有提供位置,则   框架将调用   每个都有get_absolute_url()方法   item()返回的对象。

你在使用这个应用程序吗? http://code.google.com/p/django-wikiapp/source/browse/trunk/wiki/models.py?r=161(我刚搜索了你的回溯以找到它)

Group是一个通用外键,因此它可以指向您的任何模型,这意味着它指向的每个模型都必须定义get_absolute_url

<强>更新

如果您没有Account模型,我建议您在django.contrib.contenttypes.ContentType中搜索它,因为显然文章正在引用它..

   from django.contrib.contenttypes.models import ContentType
   ContentType.objects.filter(model__icontains="account")

你有什么结果吗?

<强>更新

所以你找到了'account' ContentType

现在您可以通过contenttype.model_class()获取课程,从而发现它在{strong>或实施get_absolute_url(),因为听起来您实际上并没有使用此课程,您可以通过Article查询account,找到哪个Article指向此神秘的ContentType ContentType。

content_type = ContentType.objects.get(model__icontains='account')
articles_pointing_to_account = Article.objects.filter(content_type__pk=content_type.pk)

# Now it's your choice what to do with these articles. 
# I'd be curious what they are and how they managed to pull off this stunt
# before removing their generic relation to Account