#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(), а затем распечатать фильтр — это работает