Объект «Аккаунт» не имеет атрибута «get_absolute_url» - PullRequest
2 голосов
/ 20 февраля 2011

При попытке получить доступ к моему 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

Я не могу найти этот объект 'Account' в трассировке. Я не могу импортировать что-то здесь? Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Ответы [ 2 ]

2 голосов
/ 25 марта 2016

Вы должны определить этот метод.


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 голос
/ 20 февраля 2011

Я никогда не использовал его или это вики-приложение, но это просто звучит так, как будто у вашей модели Account нет метода get_absolute_url.

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

Если местоположение не указано, рамки будут называть Метод get_absolute_url () для каждого объект, возвращаемый items ().

Вы используете это приложение? 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() и, таким образом, найти его для реализации get_absolute_url() там или , так как похоже, что вы на самом деле не используете этот класс, вы можете найти, какой Article указывают на этот загадочный account ContentType, запрашивая Article по 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
...