Python Django:“;“值太多,无法解包”;调用user.objects.get()时
在Django 1.6中,我定义了一个自定义用户模型,但由于某种原因,现在当我创建一个超级用户并尝试获取它或作为该超级用户访问Django管理员时,我得到了这个Python Django:“;“值太多,无法解包”;调用user.objects.get()时,python,django,django-models,django-1.6,Python,Django,Django Models,Django 1.6,在Django 1.6中,我定义了一个自定义用户模型,但由于某种原因,现在当我创建一个超级用户并尝试获取它或作为该超级用户访问Django管理员时,我得到了这个ValueError:太多的值无法解包。关于这个错误,我已经仔细阅读了很多类似的问题,没有发现任何适合我的问题。我不知道会出什么问题 在自定义管理器中的自定义create_user和create_superuser方法中,我确实传递了一个额外的字段,但该字段实际上并没有进入模型,因此我不明白为什么会出现问题 此外,当尝试访问管理员时,我得
ValueError:太多的值无法解包。关于这个错误,我已经仔细阅读了很多类似的问题,没有发现任何适合我的问题。我不知道会出什么问题
在自定义管理器中的自定义create_user
和create_superuser
方法中,我确实传递了一个额外的字段,但该字段实际上并没有进入模型,因此我不明白为什么会出现问题
此外,当尝试访问管理员时,我得到了一个稍微不同的错误:AttributeError:'UserObject'没有属性'has\u module\u perms'
完全回溯:
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
get中第151行的文件“C:\Users\JJ\Coding\virtualenvs\TCR5venv\lib\site packages\django\db\models\manager.py”
返回self.get_queryset().get(*args,**kwargs)
get中的文件“C:\Users\JJ\Coding\virtualenvs\TCR5venv\lib\site packages\django\db\models\query.py”,第298行
clone=self.filter(*args,**kwargs)
文件“C:\Users\JJ\Coding\virtualenvs\TCR5venv\lib\site packages\django\db\models\query.py”,第590行,在过滤器中
返回self.\u filter\u或\u exclude(False、*args、**kwargs)
文件“C:\Users\JJ\Coding\virtualenvs\TCR5venv\lib\site packages\django\db\models\query.py”,第608行,在过滤器或排除中
clone.query.add_q(q(*args,**kwargs))
文件“C:\Users\JJ\Coding\virtualenvs\TCR5venv\lib\site packages\django\db\models\sql\query.py”,第1198行,在add\u q中
子句=self.\u添加\u q(其中\u部分,使用的\u别名)
文件“C:\Users\JJ\Coding\virtualenvs\TCR5venv\lib\site packages\django\db\models\sql\query.py”,第1232行,在添加
当前\u否定=当前\u否定)
文件“C:\Users\JJ\Coding\virtualenvs\TCR5venv\lib\site packages\django\db\models\sql\query.py”,第1035行,内置过滤器
arg,value=filter\u expr
ValueError:要解压缩的值太多
客户用户模型:
类用户对象(AbstractBaseUser):
email=models.EmailField(最大长度=254,唯一性=True,数据库索引=True)
用户名\字段='电子邮件'
#必填字段=[“学生”或“企业”,]
#告诉我们UserObject是企业还是学生
@财产
def类型(自身):
如果hasattr(self,'Student'.lower()):
返回'S'
elif hasattr(self,'BusinessHandler'.lower()):
返回“B”
其他:
raise TypeError,“UserObject既没有连接Student也没有连接BusinessHandler。”
#获取实际用户对象的伴随对象,无论是学生还是企业
@财产
def get_profile_对象(自身):
如果self.type='S':
返回getattr(self,'Student'.lower())
elif self.type==“B”:
返回getattr(self,'BusinessHandler'.lower())#以利用重构
@财产
def是大学学生(自我):
返回self.type=='S'
@财产
def是_业务(自我):
返回self.type=='B'
定义相关项(自身、输入元组):
'''
以表单形式(学生、企业[、其他])接收返回的选项元组。
根据需要返回相应的选项
'''
如果不是2您必须实施has_module_perms
方法,如以下所述:
如果希望自定义用户模型也与Admin一起使用,则用户模型必须定义一些附加属性和方法
事实证明,这里的问题实际上与抛出的错误无关
我意识到我是在打电话
UserObject.objects.get('user@email.com')
而不是
UserObject.objects.get(email='user@email.com')
这就是抛出错误的原因。如果查看Django源代码,您会发现在为QuerySet
构建筛选器时,Django会解压缩字段名和数据以在筛选器中使用,但由于我没有为对象提供字段名。get(…)
,因此在解压缩时会引发错误
为此使用了Werkzeug live browser调试器;我强烈推荐。这是一个救命稻草!嗯,至少可以节省时间。非常感谢。只是做了完全相同的事情。谢谢