我想用我的Person类的用户models.py。不过我尝试使用AbstractUser和AbstractBaseUser。他们两个给我的部分错误,我尝试登录,我尝试了几种方法,直到我意识到我需要从别人更多的经验和知识比我的帮助。
我的models.py:
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
创建基于我使用的数据库(同一个已满的数据)的模型。任何变化,基本的变化外,不在思维的。
下面我用高清views.py
,用于验证登录并重定向到仪表板。
def dash_login(request):
form = LoginForm(request.POST, None)
if request.method == 'POST':
#if form.is_valid():
username = form.data['cnpj']
password = form.data['senha']
user = authenticate(username=username)
print(username)
#p = Pessoa.objects.filter(cnpj=form.data['cnpj']).values('id_pessoa')[0]['id_pessoa']
#login(request, user)
print(request.user.is_authenticated)
#return render(request, 'dashboard.html')
return render(request, 'login.html', {'form': form})
我用print()
不多了,在到达时上线的那一刻之前测试的命令:
user = authenticate(username=username)
它会触发此错误:
文件 “C:\用户\ Pichau \应用程序数据\本地\程序\ Python的\ Python37 \ LIB \站点包\ Django的\ DB \后端\ utils.py”,行85,在_execute回报self.cursor.execute(SQL, PARAMS)django.db.utils.ProgrammingError:列pessoa.password不存在LINE 1:选择 “佩索阿”, “密码”, “佩索阿” “LAST_LOGIN”, “佩索阿” ....
**不管我把密码里面的身份验证错误就是一枪。 **
这是第二个选项:
当我陷入了同样的错误,如果我删除了p
和使用return render (request, 'dashboard.html')
我不重定向用户ID,这使我的问题得到仪表盘内其数据。
不过我还是有,这个表中的Django的登录名和不登录我models.py | forms.py
内创建登录的主要问题
总之,对于欣赏在这篇文章任何帮助,将是任何人谁给我任何指导表示感谢。
有没有对密码字段的方式,您可以用USERNAME_FIELD设置选项的能力。但是,有一点要记住的是,Django的模型字段的名称不必匹配什么在底层数据库表;你可以用自己场上定义db_column
选项:
password = models.CharField(max_length=40, null=False, db_column='senha')
另一个问题是,你当然应该使用AbstractBaseUser,不AbstractUser;后者补充说,你不想要或有字段的负荷。