Python食谱项目创建数据库Genre时触发Too many values to unpack (expected two)错误求助
解决创建BreakfastGenre时的"Too many values to unpack (expected two)"错误
嘿,这个问题我之前也碰到过!根源就在你调用User.objects.get()的方式上,咱们一步步捋清楚:
问题出在哪?
User.objects.get()要求你传入键值对形式的查询条件(比如id=123或者username='jordan'),但你直接传了request.POST['user']——这只是一个孤零零的值,没有告诉Django要用哪个字段去匹配这个值,Django内部处理的时候没法把它拆成"字段名+值"的配对,所以就炸出了这个错误。
怎么修复?
你得明确指定查询User时对应的字段,比如假设前端传过来的user是用户的ID,那代码改成这样就行:
def createbgenre(request): BreakfastGenre.objects.create( genre=request.POST['genre'], user=User.objects.get(id=request.POST['user']) ) return redirect('/breakfast')
如果request.POST['user']存的是用户名,就把id换成username:
user=User.objects.get(username=request.POST['user'])
额外的小建议
- 怕用户不存在导致报错?可以用
get_object_or_404()替代get(),这样查不到用户时直接返回404页面,比抛异常友好多了:from django.shortcuts import get_object_or_404 def createbgenre(request): target_user = get_object_or_404(User, id=request.POST['user']) BreakfastGenre.objects.create(genre=request.POST['genre'], user=target_user) return redirect('/breakfast') - 另外,直接用
request.POST['genre']如果前端没传这个字段会抛KeyError,可以换成request.POST.get('genre'),还能加个默认值,比如request.POST.get('genre', ''),再做个非空校验,代码会更健壮。
内容的提问来源于stack exchange,提问作者Jordan Samsel
相关产品推荐
相关产品推荐

