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.
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
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.