Как создать пользователя с AbstractBaseUser или AbstractUser.(Ошибка входа) - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь использовать свой класс Person в качестве пользователя в models.py.Однако я попытался использовать AbstractUser и AbstractBaseUser.Оба из них дают мне ошибки в той части, где я пытаюсь войти в систему, я пробовал несколько способов, пока не понял, что мне нужна помощь от кого-то с большим опытом и знаниями, чем я.

Мои модели.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, который проверяет логин и перенаправляет на приборная панель .

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: \ Users \ Pichau \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ db \ backends \ utils.py ", строка 85, в _execute возвращает self.cursor.execute (sql, params) django.db.utils.ProgrammingError: столбец pessoa.password не существует ЛИНИЯ 1: ВЫБРАТЬ" pessoa "." password "," pessoa ". "last_login", "pessoa" ....

** Независимо от того, что я поставил пароль внутри аутентификации, ошибка выдается.**

Это был второй вариант:

Где я попадаю в ту же ошибку, если я удаляю p и использую return render (request, 'dashboard.html') IЯ перенаправляю без идентификатора пользователя, из-за чего у меня возникают проблемы с получением его данных на приборной панели.

Однако у меня все еще есть основная проблема, эта таблица входит в систему для входа в Django, а не во вход в систему, который я создал внутри models.py | forms.py

В любом случае, спасибо за помощь в этом посте, буду благодарен всем, кто даст мне какое-либо указание.

1 Ответ

0 голосов
/ 06 февраля 2019

Нет возможности установить опцию для поля пароля, как вы можете с USERNAME_FIELD.Однако следует иметь в виду, что имя поля модели Django не обязательно должно совпадать с тем, что находится в базовой таблице БД;вы можете использовать опцию db_column в определении вашего поля:

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

Другая проблема заключается в том, что вы обязательно должны использовать AbstractBaseUser, а не AbstractUser;последний добавляет множество полей, которые вы не хотите или не имеете.

...