0

実装しようとしたができなかったので、このメソッドが機能する必要があることを知りたいです。実際に私はシェルに入ろうとしました

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

Category モデルへの外部キーである Article という名前の別のモデル内に実装したい

私の意図は、記事のような方法を持つことです

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

そんな感じ

4

2 に答える 2

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

于 2013-08-13T20:00:52.343 に答える
0

Finally, I overcame this problems throw the follow solution, first of all, my intention have always been to get something like that /c/slug_category_parent/slug_first_children/.../last_children. I've resolved throw this solution in 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),
}
于 2013-08-14T20:33:18.690 に答える