如何创建与AbstractBaseUser或AbstractUser用户。 (登录错误)

问题描述 投票:1回答:1

我想用我的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内创建登录的主要问题

总之,对于欣赏在这篇文章任何帮助,将是任何人谁给我任何指导表示感谢。

python django web login abstract-class
1个回答
0
投票

有没有对密码字段的方式,您可以用USERNAME_FIELD设置选项的能力。但是,有一点要记住的是,Django的模型字段的名称不必匹配什么在底层数据库表;你可以用自己场上定义db_column选项:

password = models.CharField(max_length=40, null=False, db_column='senha')

另一个问题是,你当然应该使用AbstractBaseUser,不AbstractUser;后者补充说,你不想要或有字段的负荷。

© www.soinside.com 2019 - 2024. All rights reserved.