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]})
Вернуться на верх