对象不可迭代:过滤 QuerySet 以显示最新实例

use*_*841 5 python django model view django-queryset

我正在尝试使用 Django 在 QuerySet 中创建一个过滤器,该过滤器返回当前登录用户提交的最新实例。

到目前为止,我的 view.py 文件中有以下内容:

def transfer(request):

    title = 'Transfers'

    queryset = Transfer.objects.filter(user=request.user).latest('timestamp')

    context = {
        "title": title,
        "queryset": queryset,
    }

    if request.method == "POST":
        print request.POST

    return render(request, "transfer.html", context)
Run Code Online (Sandbox Code Playgroud)

但是这会返回错误

类型错误:“传输”对象不可迭代

到目前为止,我的 models.py 文件如下所示:

from django.db import models
from django.contrib.auth.models import User

class Transfer(models.Model):
    id = models.AutoField(primary_key=True)
    user = models.ForeignKey(User)
    amount = models.DecimalField(max_digits=10, decimal_places=2)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
Run Code Online (Sandbox Code Playgroud)

我的 html 文件通过以下方式调用 QuerySet:

{% if request.user.is_authenticated %}
    <h2>Your Transfers</h2>
    {% if queryset %}
        {% for instance in queryset %}
            <p>Amount: {{ instance.amount }} </p>
            <p>User: {{ instance.user }} </p>
            <p>Date: {{ instance.timestamp }}</p>
        {% endfor %}
    {% else %}
        <h3>You have not made any transfers.</h3>
    {% endif %}

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

任何建议将不胜感激!

Dan*_*man 5

latest返回单个对象:最新的对象。因此,您不再将可迭代的查询集传递给模板,而是传递一个自然无法迭代的单个实例。

目前还不清楚你想在这里做什么;也许您只需要删除 for 循环,然后直接引用实例即可。或者,如果您确实想要不同,您可以迭代,您可能希望删除调用latest并仅按反向时间戳进行排序。