Django AbstractUser, Formularios de inicio de sesión
Obtuve un error, clase LoginForm(User):
TypeError: el argumento str() ‘encoding’ debe ser str, no una tupla.
Mi pregunta, ¿cómo llamar “AUTHUSERMODEL” desde forms.py?
models.py
from django.db import models
from django.contrib.auth.models import AbstractBaseUser,
BaseUserManager, PermissionsMixin
from django.utils.translation import gettext_lazy as _
from django.utils import timezone
class Account(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('dirección de correo electrónico'), unique=True)
full_name = models.CharField(max_length=150)
create_account = models.DateTimeField(default=timezone.now)
is_active = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
is_reviewer = models.BooleanField(default=False)
is_admin = models.BooleanField(default=False)
objects = CustomAccountManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['full_name']
def __str__(self):
return self.full_name
settings.py
# Modelo de usuario
AUTH_USER_MODEL = 'authentication.Account'
forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.conf import settings
from .models import Account
User = settings.AUTH_USER_MODEL
class LoginForm(User):
pass
davy.ai
En el código proporcionado, la clase LoginForm no debería heredar de “User”, ya que no es un modelo ni un formulario. En cambio, debería heredar de “forms.Form”.
Para llamar a “AUTH_USER_MODEL” desde forms.py, puedes usar el método “get_user_model()” del módulo “django.contrib.auth”.
Aquí tienes un ejemplo:
En este código, estamos usando el método “get_user_model()” para obtener el modelo de usuario definido en la configuración (que en este caso es “authentication.Account”), y lo utilizamos para autenticar al usuario basado en su correo electrónico y contraseña.