我想知道这种方法必须要努力,因为我已经尝试实施,但我不能。 其实我已经尝试通过
进入shell了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
我想在名为Article的另一个模型中实现它,它是Category模型的外键
我的意图是在文章中有一个方法,如
def get_abs_url(self):
c=Category.objects.get(pk=self.category)
return c.get_absolute_url() + '/' + self.slug
像这样的东西
答案 0 :(得分:2)
也许您可以提供有关模型的更多信息以及您要实现的目标。这样的事情可能会有所帮助:
models.py
class Article(models.Model):
category = models.ForeignKey(Category, related_name='article')
...
在视图中返回查询集的地方:
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
答案 1 :(得分:0)
最后,我克服了这个问题抛出以下解决方案,首先,我的意图一直是得到这样的东西 /c/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),
}