如何在模板中显示一个过滤后的Django模型对象列表,并按日期排序?

6uxekuva  于 2023-05-01  发布在  Go
关注(0)|答案(1)|浏览(111)

我有一个Django应用程序,它有一个名为“Book”的模型,它与“Author”模型有一个外键关系。“作者”模型有一个“名称”字段。我想在模板中显示所有'Book'对象沿着相应的'Author'名称的列表。但是,我希望将查询限制为仅返回在某个日期之后出版的书籍,并且还希望按书籍的出版日期降序排列列表。
以下是我目前为止的代码:
Models.py

class Book(models.Model):
    title = models.CharField(max_length=255)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    publication_date = models.DateField()

class Author(models.Model):
    name = models.CharField(max_length=255)

views.py

from django.shortcuts import render
from django.db.models import Q
from .models import Book

def book_list(request):
    books = Book.objects.filter(publication_date__gte='2022-01-01').order_by('-publication_date')
    return render(request, 'book_list.html', {'books': books})

我如何修改这段代码,使其在模板中包含每个“Book”对象的“Author”名称?

fwzugrvs

fwzugrvs1#

模板

{% for i  in books %}
<p> {{ 'publication_date' }} : {{ i.publication_date }} {{ 'author' }} : {{ i.author }} {{ 'title' }} : {{ i.title }} </p>
{% endfor %}

secondary model(Book)中的author字段链接到primary model(Author)。当你得到它时,你将得到作者对象。
我通过循环输出模板中的部分模型字段(引号中的只是
字符串{{ 'publication_date' }}。在这里,在每一行中,访问该字段,例如,如下所示:{{ i.publication_date }}

class Author(models.Model):
    name = models.CharField(max_length=255)

    def __str__(self):
        return self.name

我还让Author模型返回一个字符串名称。
Or可以参考模板中secondary modelauthor field,通过它获取primary model的name字段

{{  i.author.name }}

相关问题