[英]Python- ValueError: too many values to unpack (expected 2) in Django
模型.py
从 django.db 导入模型
class Userreg(models.Model): username= models.CharField(max_length=100) fname= models.CharField(max_length=100) lname= models.CharField(max_length=100) email= models.CharField(max_length=100) pass1= models.CharField(max_length=100) class 元:db_table="newapp2"
视图.py
from app1.models import Userreg
from django.shortcuts import redirect, render
from django.contrib import messages
from django.contrib.auth import authenticate,login,logout
def signup(request):
if request.method== "POST":
username= request.POST['username']
fname= request.POST['fname']
lname= request.POST['lname']
email= request.POST['email']
pass1 = request.POST['pass1']
pass2= request.POST['pass2']
if Userreg.objects.filter(username=username):
messages.error(request, "Username already exist! Please try some other username.")
return redirect('home')
if Userreg.objects.filter(email=email).exists():
messages.error(request, "Email Already Registered!!")
return redirect('home')
if len(username)>20:
messages.error(request, "Username must be under 20 charcters!!")
return redirect('home')
if pass1 != pass2:
messages.error(request, "Passwords didn't matched!!")
return redirect('home')
if not username.isalnum():
messages.error(request, "Username must be Alpha-Numeric!!")
return redirect('home')
myuser= Userreg.objects.get(username,email,pass1)
myuser.first_name= fname
myuser.last_name= lname
myuser.save()
追溯:
File "C:\Users\Anaconda3\envs\anaconda\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\Anaconda3\envs\anaconda\lib\site-packages\django\core\handlers\base.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Desktop\app\app1\views.py", line 36, in signup
myuser= Userreg.objects.get(username,email,pass1,fname,lname)
File "C:\Users\Anaconda3\envs\anaconda\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Users\Anaconda3\envs\anaconda\lib\site-packages\django\db\models\query.py", line 418, in get
clone = self._chain() if self.query.combinator else self.filter(*args, **kwargs)
File "C:\Users\Anaconda3\envs\anaconda\lib\site-packages\django\db\models\query.py", line 942, in filter
return self._filter_or_exclude(False, *args, **kwargs)
File "C:\Users\Anaconda3\envs\anaconda\lib\site-packages\django\db\models\query.py", line 962, in _filter_or_exclude
clone._filter_or_exclude_inplace(negate, *args, **kwargs)
File "C:\Users\Anaconda3\envs\anaconda\lib\site-packages\django\db\models\query.py", line 969, in _filter_or_exclude_inplace
self._query.add_q(Q(*args, **kwargs))
File "C:\Users\Anaconda3\envs\anaconda\lib\site-packages\django\db\models\sql\query.py", line 1358, in add_q
clause, _ = self._add_q(q_object, self.used_aliases)
File "C:\Users\Anaconda3\envs\anaconda\lib\site-packages\django\db\models\sql\query.py", line 1377, in _add_q
child_clause, needed_inner = self.build_filter(
File "C:\Users\Anaconda3\envs\anaconda\lib\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)
如果我只使用`
(
myuser= Userreg.objects.create_user(username,email,pass1)
)
`所以我在这个页面也有错误..
ValueError:字段“id”需要一个数字但得到“S”
如果我将只删除 Userreg 所以这里它正在工作
from django.contrib.auth.models import User, myuser= User.objects.create_user(username,email,pass1)
但是我想在my models.py
中添加我的另一个表,那么它在这个代码中将如何工作?每个人都可以在这个代码中提供帮助吗?
您需要将关键字 args 传递给 get 方法。 将您的查询替换为:
myuser= Userreg.objects.get(username=username,email=email,pass1=pass1)
即使这样,您的代码仍然无法按预期工作,因为您拒绝现有的用户名和 email,但使用相同的过滤器。 用户将被重定向(如果他们之前注册了他们的电子邮件/用户名),或者 get() 将引发DoesNotExist
异常(如果用户名/电子邮件在表中不存在)。
您可能应该保存数据而不是获取它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.