【问题标题】:Not able to iterate through QuerySet results with Django无法使用 Django 遍历 QuerySet 结果
【发布时间】:2021-01-08 00:33:39
【问题描述】:

我是 Django 新手,遇到了 QuerySet 的问题。我正在试验并尝试使用 Bid.objects.filter 方法到达一个字段。如果我使用任何过滤器(即使我输入像 itemID = "Monkey517" 这样的完全匹配项),它也会不断出现。但是,如果我进行“全部”搜索,则会出现大量我不知道如何迭代的查询集。

我正在使用我在网上找到的示例,我收到“'QuerySet' 对象没有属性'itemID'”或'QuerySet' 对象没有属性'highestBidder'的错误

我不确定如何获取更大查询集中的每个查询集。这对我来说有点令人困惑。谁能帮我解决这个问题?

谢谢!

下面是我的相关代码:

views.py:

   def closeAuction(request):
    username = request.POST.get("username")
    itemID = request.POST.get("itemID")
    query = Bid.objects.all()
    for queries in query.iterator():
        print(query.itemID)
    return render(request, "auctions/index.html")

模型.py:

class Bid(models.Model):
itemID = models.CharField(max_length=64)
newBid = models.IntegerField()
highestBidder = models.CharField(max_length=64)

post.html:

{% if user.is_authenticated %}
       <form name="closeAuction"
             action="/closeAuction"
          method="post" >
            {% csrf_token %}
        <input autofocus class="form-control" type="hidden" name="username" value={{user.username}}>
        <input autofocus class="form-control" type="hidden" name="itemID" value={{p.title}}{{p.price}}>
        <input class="btn btn-primary" type="submit" value="Close Auction">
    {% endif %}
       </form>

【问题讨论】:

    标签: python django django-queryset


    【解决方案1】:

    哦,我明白了:您正在打印对象 query 而不是 queries。所以你可以这样做:

    for queries in query:
        print(queries.itemID)
    

    而不是

    for queries in query:
        print(query.itemID)
    

    【讨论】:

    • 感谢您为具有多个字段的查询集工作。我将如何打印仅选择一个字段的此查询的数据? query = Bid.objects.filter(itemID = itemID).first() 我试过 query.itemID 但它说查询没有那个属性。
    【解决方案2】:

    你试过这段代码了吗(没有.iterator()

    def closeAuction(request):
    username = request.POST.get("username")
    itemID = request.POST.get("itemID")
    query = Bid.objects.all()
    for queries in query:
        print(query.itemID)
    return render(request, "auctions/index.html")
    

    【讨论】:

    • 是的,我做到了。我在网上做了一些搜索后尝试了迭代器。无论有没有.iterator(),我都会得到相同的结果。 /closeAuction 'QuerySet' 对象的 AttributeError 没有属性 'itemID'
    【解决方案3】:

    您是否尝试过在不使用 for 循环的情况下打印查询?我是说

    查询 = Bid.objects.all() 打印(query.filter(itemID=itemID))

    【讨论】:

    • 是的,它打印出一个查询集。但是,我该如何获取数据呢?
    • “打印([items.ItemID for items in query])”怎么样?
    • 我实际上刚刚意识到在 for 循环中你调用 query.itemID 而不是 queries.itemID 我猜这可能是问题
    • 是的,这就是迭代的问题。它在我执行 queries.itemID 时有效,但为什么它不适用于一个字段?我尝试了你所做的,但它只是打印出括号 []。估计是空的但为什么?当我进行过滤时,它没有得到任何数据 - 但是当我像你展示的那样打印出来时,它会打印出数据。
    • query = Bid.objects.filter(itemID = itemID) print(query) print([items.itemID for items in query]) 正在打印:无和 [] 为什么?当我使用上面的方法获取 all() 然后打印出过滤器时 - 它可以工作
    猜你喜欢
    • 1970-01-01
    • 2020-08-14
    • 2016-01-09
    • 1970-01-01
    • 2010-11-16
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    相关资源
    最近更新 更多