Python 如何使用AbstractBaseUser或AbstractUser创建用户。(登录错误)
我正在尝试将我的Person类用作models.py中的用户。但是,我尝试使用AbstractUser和AbstractBaseUser。在我尝试登录时,这两种方法都给了我错误。我尝试了几种方法,直到我意识到我需要比我更有经验和知识的人的帮助 My models.py:Python 如何使用AbstractBaseUser或AbstractUser创建用户。(登录错误),python,django,web,login,abstract-class,Python,Django,Web,Login,Abstract Class,我正在尝试将我的Person类用作models.py中的用户。但是,我尝试使用AbstractUser和AbstractBaseUser。在我尝试登录时,这两种方法都给了我错误。我尝试了几种方法,直到我意识到我需要比我更有经验和知识的人的帮助 My models.py: from django.contrib.auth.models import AbstractUser from django.db import models class Pessoa(AbstractUser):
from django.contrib.auth.models import AbstractUser
from django.db import models
class Pessoa(AbstractUser):
id_pessoa = models.AutoField(primary_key=True)
cnpj = models.CharField(max_length=14, unique=True)
nome = models.CharField(max_length=70)
email = models.CharField(max_length=100, blank=True, null=True)
senha = models.CharField(max_length=40, null=False)
ativo = models.BooleanField(blank=True, null=True)
datacadastro = models.DateField(blank=True, null=True)
cidade = models.CharField(max_length=50, blank=True, null=True)
uf = models.CharField(max_length=2, blank=True, null=True)
USERNAME_FIELD = 'cnpj'
class Meta:
managed = False
db_table = 'pessoa'
详细信息:我无法在我使用的任何模板中删除或添加字段,因为我使用了inespectdb
来基于我使用的数据库(与已经充满数据的数据库相同)创建模型。任何变化,除了基本变化,都是经过深思熟虑的
下面是my视图.py
,其中包含验证登录并重定向到仪表板的def
我使用print()
user = authenticate(username=username)
它会触发此错误:
文件“C:\Users\Pichau\AppData\Local\Programs\Python\Python37\lib\site packages\django\db\backends\utils.py”,
第85行,in_execute返回self.cursor.execute(sql,params)
django.db.utils.ProgrammingError:列pessoa.password不存在
存在第1行:选择“pessoa”,“密码”,“pessoa”,“上次登录”,
“佩索阿”
**不管我把密码放在里面,验证错误是
开枪**
这是第二个选项:
当我遇到同样的错误时,如果我删除p
并使用return render(请求'dashboard.html')
我将在没有用户id的情况下重定向,这会导致我在仪表板中获取其数据时出现问题
但是我仍然有一个主要问题,这个表是登录到Django登录,而不是我在models.py | forms.py
无论如何,感谢在这篇文章中对我的任何帮助,也会感谢任何给我任何指导的人 无法使用USERNAME\u字段为密码字段设置选项。但是,需要记住的一点是,Django模型字段的名称不必与底层db表中的名称匹配;您可以使用字段定义上的选项:
password = models.CharField(max_length=40, null=False, db_column='senha')
另一个问题是,您当然应该使用AbstractBaseUser,而不是AbstractUser;后者添加了大量您不想要或不拥有的字段。无法使用USERNAME\u字段为密码字段设置选项。但是,需要记住的一点是,Django模型字段的名称不必与底层db表中的名称匹配;您可以使用字段定义上的选项:
password = models.CharField(max_length=40, null=False, db_column='senha')
另一个问题是,您当然应该使用AbstractBaseUser,而不是AbstractUser;后者添加了大量您不想要或不拥有的字段。您是否运行了/manage.py makemigrations
和/manage.py migrate
?@ruddra OP特别不允许Django管理这些模型。但是@Nicolas您希望将密码存储在哪里?您在该模型上没有密码字段。@ruddra是的,没有更多的迁移,我不知道这里缺少什么。@DanielRoseman密码字段是“senha”,但是我是如何指定django的?您是否运行了/manage.py makemigrations
和/manage.py migrate
?@ruddra OP特别不允许django管理这些模型。但是@Nicolas您希望将密码存储在哪里?您在该模型上没有密码字段。@ruddra是的,没有更多的迁移,我不知道这里缺少什么。@DanielRoseman密码字段是“senha”,但我如何指定django?谢谢Daniel的帮助。我将对此进行测试,但当我尝试使用AbstractBaseUser时,我会犯一些错误,或者我做了一些不正确的事情,这就是为什么我要使用它。你能给我举一些基本的例子吗?或者更多关于AbstractBaseUser的帮助?!我尝试了一些资源,但有点迷茫。好吧,我想我解决了这个问题,但现在我在使用模型时遇到了麻烦,就像从任何字段获取数据一样,现在当我尝试使用Pessoa.object等时,它显示出超过了最大递归深度。我想这是相同的问题,因为我去掉了使用模型获取数据的行。但是我不知道问题是AbstractBaseModel,还是别的什么。谢谢Daniel的帮助。我将对此进行测试,但当我尝试使用AbstractBaseUser时,我会犯一些错误,或者我做了一些不正确的事情,这就是为什么我要使用它。你能给我举一些基本的例子吗?或者更多关于AbstractBaseUser的帮助?!我尝试了一些资源,但有点迷茫。好吧,我想我解决了这个问题,但现在我在使用模型时遇到了麻烦,就像从任何字段获取数据一样,现在当我尝试使用Pessoa.object等时,它显示出超过了最大递归深度。我想这是相同的问题,因为我去掉了使用模型获取数据的行。但我不知道问题出在AbstractBaseModel,还是别的什么