繁体   English   中英

Python-ValueError:Django 中的解包值太多(预期为 2)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM