【问题标题】:ValueError: too many values to unpack (expected 2) DjangoValueError:要解压的值太多(预期为 2)Django
【发布时间】:2021-09-02 07:17:02
【问题描述】:

不知道为什么,但我的代码出现以下错误:

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

这是我的意见.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

如果能提供任何帮助,我将不胜感激。

【问题讨论】:

  • 你不能返回一个QuerySet,一个视图应该总是返回一个HTTP响应。

标签: django


【解决方案1】:

您的视图返回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 list_name`s of user 具有给定用户名的用户:

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]})

【讨论】:

    【解决方案2】:

    异常来自 Django 内部中间件,因为它试图将您返回的 qs 处理为响应。

    您需要返回一个响应,而不仅仅是一个查询集,例如这个简单的示例返回用户 ID 列表。

    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]})
    

    【讨论】:

      猜你喜欢
      • 2016-09-11
      • 1970-01-01
      • 1970-01-01
      • 2020-12-09
      • 2019-04-19
      • 1970-01-01
      • 2014-07-31
      • 1970-01-01
      相关资源
      最近更新 更多