Django从数据库获取最新条目

Jim*_*myn 8 python django django-models

我有两个问题,但它们与同一主题有关.

我知道如何从for loop使用模板标签中检索数据

{% for status in status %}

    <tr>
        <td>{{ status.status}}</td>
    </tr>

{% endfor %}
Run Code Online (Sandbox Code Playgroud)

但是,当我想要检索单个对象时,即使我使用时也会出现错误:

po = Status.objects.latest('id')
Run Code Online (Sandbox Code Playgroud)

并删除for循环.

我明白了:

'Status' object is not iterable
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 如何从给定模型的数据库中获取最新条目?
  2. 如何设置模板标签以仅允许一条记录?

Mat*_*our 15

这里有两个不同的问题:

  1. 如何从数据库中检索最新对象.

您可以使用latest()queryset运算符执行此操作.通过阅读文档,您将注意到此运算符适用于日期字段,而不是整数.

Status.objects.latest('date_added') # or date_updated
Run Code Online (Sandbox Code Playgroud)

如果您想通过ID执行此操作,则需要按ID排序并选择第一个结果.(这只有在使用递增主键时才有效,它不适用于UUID或随机生成的哈希值).

Status.objects.order_by('id')[0]
Run Code Online (Sandbox Code Playgroud)

旁注:我个人会用这种date_added / date_updated方式.

  1. 迭代单个对象

无法迭代单个对象.为此,您需要使用不同的模板.或者,您需要将单个对象添加到列表中.

# note the [] around the query
result = [Status.object.latest('date_added')]
Run Code Online (Sandbox Code Playgroud)

就个人而言,我对列出单个/多个结果有不同的看法.我有ListView很多结果对象和一个DetailView单个对象.