【问题标题】:ValueError not enough values to unpack (expected 4, got 2) - DjangoValueError 没有足够的值来解包(预期 4,得到 2) - Django
【发布时间】:2019-08-18 15:27:15
【问题描述】:

我有这样的看法:

def getData():
    response = requests.get("https://path.to/api/")
    data = response.json()
    random_data = [MyModel(name=name, street=street, email=email, phone=phone) \
     for name, street, email, phone, in data.items()]
    MyModel.objects.bulk_create(random_data)

@require_http_methods(['GET', 'POST'])
def index(request):
    datas = getData()
    return render(request, 'index.html')

当我访问 index 方法的指定 url 时,它会抛出这个:

Traceback (most recent call last):
File "/home/user/.virtualenvs/myproj/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/home/user/.virtualenvs/myproj/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/user/.virtualenvs/myproj/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/user/.virtualenvs/myproj/lib/python3.6/site-packages/django/views/decorators/http.py", line 40, in inner
return func(request, *args, **kwargs)
File "/home/user/django_projects/myproj/myproj/user/views.py", line 29, in index
datas = getData()
File "/home/user/django_projects/myproj/myproj/user/views.py", line 18, in getData
for name, street, email, phone, in data.items()]
File "/home/user/django_projects/myproj/myproj/user/views.py", line 18, in <listcomp>
for name, street, email, phone, in data.items()]
ValueError: not enough values to unpack (expected 4, got 2)
[18/Aug/2019 15:18:05] "GET /api/index/ HTTP/1.1" 500 85435
Method Not Allowed (HEAD): /api/index/

从这个错误中,我认为来自 api 的结果 json 响应可能是问题所在,因为其中一些项目类似于 nested 到结果 json

这是一个示例响应:

random

有什么想法吗?

【问题讨论】:

  • 你使用的是 Django 还是 django DRF?
  • Django,api 装饰器是标准的 Django 的
  • 我认为 requests.get("path.to/api/") 这个请求没有在列表理解中获得所需的值,检查您的模型对象是否已保存?
  • 我可以想象,但我该怎么做呢?我的意思是,它可能是因为生成的 json,其中一些项目是嵌套的,所以,我猜想,有一个链接与来自原始 url 的示例的链接
  • 确实必须在嵌套响应中找到值,不能像这样直接解压json对象,可能需要连接一些值,例如名称

标签: python django api


【解决方案1】:

你能检查一下这个解决方案吗!!

def getData():
    response = requests.get("https://path.to/api/")
    data = response.json()
    random_data = [MyModel(name=x['name']['first'], streer=x['location']['street'], email=x['email'], phone=x['phone']) for x  in data['results']]
    MyModel.objects.bulk_create(random_data)

【讨论】:

  • 谢谢!在模型上?那么综合榜单上的看法对吗?试试看:)
  • init 添加到我的模型中,然后将 random_data = 更改为您的综合列表,它说,'AttributeError: 'NoneType' object has no attribute 'attname''你想让我编辑我的问题吗?非常感谢
  • 不,不,我的 MyModel 是简单的 python 类,用于验证进入列表压缩的数据,所以你必须替换 random_data 行,我编辑了我的答案,请检查
  • 很棒的伙伴!谢谢!
猜你喜欢
  • 2018-04-21
  • 2016-07-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多