尝试访问我的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
我在追溯中找不到这个'帐户'对象。我在这里没有进口东西吗?如果您需要更多信息,请与我们联系。
答案 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