我在AUTHOR的django视图中工作,我首先需要拉起所有作者。接下来我需要利用另一个模型(Book - 包含在视图中),对于每个作者,我想找到他们已经写好的活动的书。
Book模型具有作者的外键(作者ID或主键)
我已经得到了以下内容......但是它没有工作,我感到难过 - 有什么想法吗?
def authors(request):
_vars = {}
authors = Author.objects.all()
#loop through the authors
for author in authors.object_list:
books = Book.objects.filter(author=author.pk).filter(is_active=True, author__is_active=True).order_by('-author__author_type__importance').exclude(author__is_active=False)
author.append(books)
_vars['authors'] = authors
return render(request, 'template.html', _vars)
抱歉:澄清一下 - 我无法在调试模式下运行它,我在实时环境中这样做(愚蠢地)。
服务器响应500错误,我有点盲目为什么。就是这条线
books = Book.objects.filter(author=author.pk).filter(is_active=True, author__is_active=True).order_by('-author__author_type__importance').exclude(author__is_active=False)
我的怀疑是主键查找。我在特定的作者查找中使用完全相同的搜索并且它有效 - 但是当我尝试在for循环中引用主键时它失败
我想要的是返回所有作者的列表(我的作者模型中的id,姓名,年龄等)以及他们的书籍列表(书籍ID,书名等)
我有一个对象,我可以去author.name(这是作者姓名)或author.books.name(得到这本书的名字 - 好吧它是一套书所以我需要迭代 - 但你明白了吗?)
模板可能看起来像
{% for author in authors %}
Name: {{ author.name }}
Age: {{ author.age }}
{% for book in author.books %}
Title: {{ book.title }}
Published: {{ book.published }}
{% endfor %}
{% endfor %}
由于
答案 0 :(得分:0)
您没有将此查询的结果传递给模板:
books = Book.objects.filter(author=author.pk).filter(is_active=True, author__is_active=True).order_by('-author__author_type__importance').exclude(author__is_active=False)
(另外,您不应该同时需要filter(author__is_active=True)
和exclude(author__is_active=False
)。
就个人而言,我会做类似
的事情books = Books.objects.all().filter(is_active=True, author__is_active=True).order_by('author')
将其传递给模板:
return render(request, 'template.html', {'books': books})
或
return render(request, 'template.html', locals())
在模板中:
{% for b in books %}
Author: {{ b.author.name }}
Title: {{ b.title }}
{% endfor %}
或类似的东西
答案 1 :(得分:0)
使用
books = Book.objects.filter(author=author)filter(is_active=True, author__is_active=True).order_by('-author__author_type__importance').exclude(author__is_active=False)
或使用
books = Book.objects.filter(author__id=author.id)filter(is_active=True, author__is_active=True).order_by('-author__author_type__importance').exclude(author__is_active=False)
两者都可以使用
答案 2 :(得分:0)
好的解决了......
我扔掉了这个街区并重新开始,很好很简单
for author in authors:
author.books = ''
books = Book.objects.filter(author=author, is_active=True)
author.books = books
你知道什么......它有效。 谢谢大家的帮助!