es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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
Tags:  , , ,

Answer

  1. Avatar for 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:

    from django import forms
    from django.contrib.auth import get_user_model
    
    User = get_user_model()
    
    class LoginForm(forms.Form):
        email = forms.EmailField()
        password = forms.CharField(widget=forms.PasswordInput)
    
        def clean(self):
            email = self.cleaned_data.get('email')
            password = self.cleaned_data.get('password')
    
            try:
                user = User.objects.get(email=email)
            except User.DoesNotExist:
                raise forms.ValidationError('Correo electrónico o contraseña no válidos')
    
            if not user.check_password(password):
                raise forms.ValidationError('Correo electrónico o contraseña no válidos')
    
            return super().clean()
    

    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.

Comments are closed.