为啥这个 Django 错误“要解压的值太多”?

Posted

技术标签:

【中文标题】为啥这个 Django 错误“要解压的值太多”?【英文标题】:Why this Django error "Too Many Values to Unpack"?为什么这个 Django 错误“要解压的值太多”? 【发布时间】:2017-05-21 18:52:39 【问题描述】:

我有一个通过模板中的 Ajax 函数调用的 Django 视图。我的模板有一个“国家”下拉菜单和一个“地区”(或州)下拉菜单。当用户单击某个国家/地区时,我想使用 Ajax 函数来获取该国家/地区的所有区域(或州)并使用该数据填充“区域”下拉列表。但是,当我的视图执行并尝试返回查询集时,我收到此错误:

ValueError: too many values to unpack

这里是模板标签和Ajax函数:

# demo.html
<select id="id_country" name="country" onchange="getState(this.value);">
  <option value="" selected="selected">Please choose...</option>
  <option value="US">United States</option>
  <option value="GB">United Kingdom</option>
  <option value="CA">Canada</option>
</select>

<script>
function getState(val) 
    $.ajax(
    type: "GET",
    url: "/demo/get_region",
    data:'country_id='+val,
    success: function(data)
         $("#id_region").html(data);
    
    );

</script>

这里是视图:

# views.py
from location.models import CountryRegion
def get_region(request):
    country_id = request.GET.get('country_id', None)
    country_region = CountryRegion.objects.filter(country_cd=country_id)
    # Error occurs here on the return
    return country_region

模型(我意识到没有标准化)看起来像这样:

class CountryRegion(models.Model):
    country_cd = models.CharField(max_length=2)
    country_name = models.CharField(max_length=50)
    region_cd = models.CharField(max_length=3)
    region_name = models.CharField(max_length=50)

数据库记录如下所示:

id    country_cd    country_name    region_cd   region_name
59    US            United States   NY          New York

为什么会出现这个错误?如果国家代码是“美国”,我会 返回 50 个实例,每个状态一个。是否有一些限制 Django 视图可以返回多少数据?

【问题讨论】:

Django view returning json without using template的可能重复 您应该返回 Response 对象而不是 CountryRegion 对象。见docs.djangoproject.com/en/1.10/topics/http/views 【参考方案1】:

你必须先导入json, 导入 json 然后 返回 HttpResponse( json.dumps(country_region), content_type="应用程序/json" )

【讨论】:

以上是关于为啥这个 Django 错误“要解压的值太多”?的主要内容,如果未能解决你的问题,请参考以下文章

值:要解压的值太多(预计 18 个)

Django - 无法按外键 first_name 过滤

为啥我在 Django 中有这个错误?

为啥 Django 给我一个 404 错误

为啥这个 sybase 错误会随着查询的任何更改而消失?

django 编码错误