仅将当前页对象发送到模板(Django)

2024-09-27 21:28:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从MDN学习django。我在locallibrary工作。有一个问题。 我想只发送作者页上的书,但不是所有的书,只有当前页的作者书

如果url为

/作者/1

然后只发送了作者id为1的书,而不是全部

在AuthorDetailView中,我尝试了context['books']=Book.objects.filter(author\u exact=author.id)。 但它给了错误

**TypeError at /catalog/author/1**

**int() argument must be a string, a bytes-like object or a number, not 'DeferredAttribute'**

当我写上下文['books']=Book.objects.filter(author\u exact=1) 然后它在所有页面上只发送authord1的书。 在作者/2上

所以我想把authord2的书发到author/2上。关于作者的书。 但并不是所有关于每一页的书

在需要的时候发送所有对象是没有意义的

{% for book in books%}
    {% if author.id is book.author.id %}
      <li>
        <a href="{{ book.get_absolute_url }}">{{ book.title }}</a> ({{book.author}})
      </li>
{% endif %}

这段代码做我想做的,但通过发送所有对象。 我希望你明白我想要什么

这是我的模型,视图https://pastebin.com/yY6M5LUA


Tags: 对象djangoidurlobjects作者lifilter
2条回答

filter将向您发送一个queryset而不是一个objects,您需要做的是获得与需要相对应的对象,例如,Book.objects.filter(author__exact=Author.id)[0]将从queryset中获得第一个对象,因此您可以从这里获得对象

您使用的是DetailView,因此上下文中已经有了当前作者。因此实际上没有理由在视图中执行任何操作—您可以删除get_context_data方法。相反,您可以遵循模板中的反向关系:

{% for book in author.book_set.all %}
  {{ book.title }}
{% endfor %}

相关问题 更多 >

    热门问题