Не удается выполнить итерацию по результатам набора запросов с помощью Django

#python #django #django-queryset

#python #django #django-queryset

Вопрос:

Я новичок в Django, и у меня возникают проблемы с наборами запросов. Я экспериментирую и пытаюсь добраться до поля, используя метод Bid.objects.filter . Он постоянно выдает none, если я использую какие-либо фильтры (даже когда я ввожу точное совпадение, например 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")
  

Models.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>
  

Ответ №1:

О, я вижу: вы печатаете объекты query вместо queries . Итак, вы могли бы сделать:

 for queries in query:
    print(queries.itemID)
  

вместо

 for queries in query:
    print(query.itemID)
  

Комментарии:

1. Спасибо, что работает для набора запросов с несколькими полями. Как мне распечатать данные для этого запроса, который выбирает только одно поле? query = Bid.objects.filter(ItemId = ItemId).first() Я попробовал query.ItemId, но он говорит, что у query нет этого атрибута.

Ответ №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")
  

Комментарии:

1. да, я это сделал. Я попробовал iterator после выполнения некоторых поисковых запросов в Интернете. Я получаю те же результаты с или без. итератор (). Ошибка атрибута в / closeAuction объект ‘QuerySet’ не имеет атрибута ‘ItemId’

Ответ №3:

Вы пробовали печатать запрос без цикла for? Я имею в виду

query = Bid.objects.all() print(query.filter(ItemId=ItemId))

Комментарии:

1. да, и он выводит набор запросов. Но тогда как мне добраться до данных?

2. Как насчет «print ([items. ItemId для элементов в запросе])»?

3. На самом деле я только что понял, что в цикле for вы вызвали query.ItemId вместо queries.ItemId Я предполагаю, что это может быть проблемой

4. да, это проблема с итерацией. Это работает, когда я выполняю запросы.ItemId Но почему он не работает только для одного поля? Я попробовал то, что вы сделали, но он просто выводит скобки []. Я думаю, он пустой. Но почему? когда я выполняю фильтр, он не получает никаких данных, но когда я распечатал его, как вы показали, он распечатывает данные.

5. запрос = Bid.objects.filter(ItemId = ItemId) печать (запрос) печать([items.ItemId для элементов в запросе]) Выводится: None и [] почему? Когда я использую ваш метод выше, чтобы захватить all(), а затем распечатать фильтр — это работает