Python- ValueError: слишком много значений для распаковки (ожидалось 2) в Django
Models.py
from django.db import models
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 Meta: db_table="newapp2"
>>
Views.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()
TRACEBACK:
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.get(username,email,pass1)
)
так что я получил ошибку и на этой странице...
ValueError: Поле 'id' ожидало число, но получило 'S'
Я не знаю, что я сделал неправильно в этом коде? Может ли каждый помочь в этом коде?
Вам необходимо передать ключевое слово args в метод get. Замените свой запрос на следующий:
myuser= Userreg.objects.get(username=username,email=email,pass1=pass1)
Даже если это сделать, ваш код все равно не будет работать так, как задумано, потому что вы отбрасываете существующие имя пользователя и email, но используете те же самые для фильтрации. Либо пользователь будет перенаправлен (если он зарегистрировал свой email/имя пользователя ранее), либо get() вызовет исключение DoesNotExist
(если имя пользователя/email не существует в таблице).
Вероятно, вам следует сохранить данные вместо их получения.