raise FieldError( django.core.exceptions.FieldError: Cannot resolve keyword 'is_active' into field

Question:

I got this doubt, I’m creating a custom user model in Django and at the moment to apply the migrations, it throws me this error

raise FieldError(
django.core.exceptions.FieldError: Cannot resolve keyword 'is_active' into field. Choices are: cargo, centro, centro_id, direccion, fecha_nacimiento, id, imagen_perfil, last_login, logentry, nacionalidad, password, profesion, rut, sexo, telefono

I share you my code,

This is the model

class Usuario(AbstractBaseUser):
    centro = models.ForeignKey(Centro, on_delete=models.CASCADE, verbose_name='Centro o Unidad', blank=True, null=True)
    telefono = models.CharField(max_length=100, unique=True, verbose_name='Teléfono')
    rut = models.CharField(max_length=100, unique=True, verbose_name='RUT')
    profesion = models.CharField(max_length=150, verbose_name='Profesión')
    cargo = models.CharField(max_length=150, verbose_name='Cargo')
    nacionalidad = models.CharField(max_length=100, verbose_name='Nacionalidad')
    sexo = models.CharField(max_length=10, choices=SEXO_CHOICES ,verbose_name='Sexo')
    fecha_nacimiento = models.DateField(auto_now=False, auto_now_add=False,verbose_name='Fecha de nacimiento', blank=True, null=True)
    imagen_perfil = models.ImageField(upload_to='perfil/', verbose_name='Imágen de Perfil', max_length='255', blank=True, null=True)
    direccion = models.CharField(max_length=250, blank=True, null=True, verbose_name='Dirección')
    objects = UsuarioManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['email', 'nombre']

    def __str__(self):
        return self.first_name
    
    def get_email_user(self):
        return self.email.lower()
    
    def save(self, *args, **kwargs):
        self.email = self.email.lower()
        return super(Usuario, self).save(*args, **kwargs)
    
    def has_perm(self, perm, obj = None):
        return True
    
    def has_module_perms(self, app_label):
        return True
    
    @property
    def is_staff(self):
        return self.is_staff

This is the serializer

class UsuarioSerializer(serializers.ModelSerializer):
    class Meta:
        model = Usuario
        fields = '__all__'
        extra_kwargs = {'password': {'write_only': True}, 'id': {'read_only': True}}

I was searching for a answer in several internet forums

Answers:

Since you are specifying the custom User model, the is_active is a required field for the AbstractBaseUser model in Django.

You should add it in the Usuario model, like so:

class Usuario(AbstractBaseUser):
    centro = models.ForeignKey(Centro, on_delete=models.CASCADE, verbose_name='Centro o Unidad', blank=True, null=True)
    telefono = models.CharField(max_length=100, unique=True, verbose_name='Teléfono')
    rut = models.CharField(max_length=100, unique=True, verbose_name='RUT')
    profesion = models.CharField(max_length=150, verbose_name='Profesión')
    cargo = models.CharField(max_length=150, verbose_name='Cargo')
    nacionalidad = models.CharField(max_length=100, verbose_name='Nacionalidad')
    sexo = models.CharField(max_length=10, choices=SEXO_CHOICES ,verbose_name='Sexo')
    fecha_nacimiento = models.DateField(auto_now=False, auto_now_add=False,verbose_name='Fecha de nacimiento', blank=True, null=True)
    imagen_perfil = models.ImageField(upload_to='perfil/', verbose_name='Imágen de Perfil', max_length='255', blank=True, null=True)
    direccion = models.CharField(max_length=250, blank=True, null=True, verbose_name='Dirección')
    is_active = models.BooleanField(default=True)
    objects = UsuarioManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['email', 'nombre']

    def __str__(self):
        return self.first_name
    
    def get_email_user(self):
        return self.email.lower()
    
    def save(self, *args, **kwargs):
        self.email = self.email.lower()
        return super(Usuario, self).save(*args, **kwargs)
    
    def has_perm(self, perm, obj = None):
        return True
    
    def has_module_perms(self, app_label):
        return True
    
    @property
    def is_staff(self):
        return self.is_staff

Then run migration commands.

Answered By: Sunderam Dubey