2013-08-13 2 views
0

Я хотел бы знать, что этот метод должен работать, потому что я пытался реализовать, но я не мог. На самом деле я пытался входе в оболочку черезget_absolute_url в django-категориях

python manage.py shell 
c=Category.objects.get(pk = 3) 
c.get_absolute_url 
#I got <bound method Category.get_absolute_url of <Category: Category2>> 
c.get_absolute_url() 
#It Doesn't work 

Я хочу реализовать в рамках другой модели под названием статьи, что это внешний ключ к категории модели

Мое намерение иметь метод в статье, как

def get_abs_url(self): 
    c=Category.objects.get(pk=self.category) 
    return c.get_absolute_url() + '/' + self.slug 

что-то вроде этого

ответ

2

может быть, вы могли бы поставить более подробную информацию о ваших моделей и что вы пытаясь добиться. Нечто подобное могло бы помочь:

models.py

class Article(models.Model): 
    category = models.ForeignKey(Category, related_name='article') 
    ... 

Где бы вы возвращающий QuerySet в просмотров:

def get_context_data(self, **kwargs): 
    context = super(ArticleView, self).get_context_data(**kwargs) 
    context['articles'] = Article.objects.all().select_related('category') 
    return context 

В шаблонах:

{% for article in articles %} 
    {% for category in article.category %} 
     {{ category.get_absolute_url }}/{{ category.slug }} # this will return a string: abs_url/slug 
    {% endfor %} 
{% endfor %}  

Читайте о select_related здесь : https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related

Вы также могли бы взглянуть на реализацию менеджеров: https://docs.djangoproject.com/en/dev/topics/db/managers/#django.db.models.Manager

0

Наконец, я преодолел это проблемы бросить последующее решение, в первую очередь, мои намерения всегда были, чтобы получить что-то подобное /с/slug_category_parent/slug_first_children/.../last_children. Я решил бросить это решение в settings.py:

cat_url= lambda c: cat_url(c.parent) + '/' +c.slug if c.parent else '/c/'+ c.sl 
ABSOLUTE_URL_OVERRIDES = { 
    'categories.category': lambda c: cat_url(c), 
} 
Смежные вопросы