ValueError: слишком много значений для распаковки (ожидалось 2) Django
Не уверен, почему, но мой код получает следующую ошибку:
ValueError: too many values to unpack (expected 2)
Вот мой models.py:
class UserList(models.Model):
list_name = models.CharField(max_length=255)
user = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.list_name
Вот мой views.py
def otherUserList(request):
userName = request.GET.get('userName', None)
print(userName)
qs = UserList.objects.filter(user__username=userName)
return qs
Вот трассировка:
Internal Server Error: /electra/otheruserlist/
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/utils/deprecation.py", line 116, in __call__
response = self.process_response(request, response)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/middleware/clickjacking.py", line 26, in process_response
if response.get('X-Frame-Options') is not None:
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/db/models/query.py", line 418, in get
clone = self._chain() if self.query.combinator else self.filter(*args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/db/models/query.py", line 942, in filter
return self._filter_or_exclude(False, *args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/db/models/query.py", line 962, in _filter_or_exclude
clone._filter_or_exclude_inplace(negate, *args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/db/models/query.py", line 969, in _filter_or_exclude_inplace
self._query.add_q(Q(*args, **kwargs))
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1358, in add_q
clause, _ = self._add_q(q_object, self.used_aliases)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1377, in _add_q
child_clause, needed_inner = self.build_filter(
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1255, in build_filter
arg, value = filter_expr
ValueError: too many values to unpack (expected 2)
[02/Sep/2021 05:38:43] "GET /electra/otheruserlist/?userName=alice HTTP/1.1" 500 94227
Буду очень благодарен за любую помощь.
Исключение исходит от внутреннего промежуточного ПО Django, поскольку оно пытается обработать ваш возвращенный qs
как ответ.
Вам нужно вернуть ответ, а не просто набор запросов, например, в этом простом примере нужно вернуть список идентификаторов пользователей.
from django.http import JsonResponse
def otherUserList(request):
userName = request.GET.get('userName', None)
print(userName)
qs = UserList.objects.filter(user__username=userName)
return JsonResponse({"ids": [user.id for user in qs]})
Ваше представление возвращает QuerySet
, но в этом нет особого смысла: представление должно возвращать HttpResponse
. Например, вы можете отрисовать шаблон, преобразовать его в JSON и т.д.
Например, мы можем отобразить шаблон следующим образом:
from django.shortcuts import render
def otherUserList(request):
userName = request.GET.get('userName', None)
qs = UserList.objects.filter(user__username=userName)
return render(request, 'some-template.html', {'lists': qs})
Или, например, мы можем вернуть JsonResponse wit the
список_имен_пользователей с заданным именем пользователя с:
from django.http import JsonField
def otherUserList(request):
userName = request.GET.get('userName', None)
qs = UserList.objects.filter(user__username=userName)
return JsonResponse({'listnames': [list.name for list in qs]})