FieldError( django.core.exceptions.FieldError: 无法将关键词’is_active’解析为字段

huangapple go评论103阅读模式
英文:

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

问题

在应用迁移时,您遇到了以下错误:

  1. raise FieldError(
  2. 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

这个错误是因为在您的自定义用户模型中,Django 试图解析一个名为 'is_active' 的字段,但未找到该字段。您的模型代码如下:

  1. class Usuario(AbstractBaseUser):
  2. # ...其他字段...

要解决此问题,您需要确保自定义用户模型(Usuario)继承自 AbstractBaseUser 并且包含一个名为 'is_active' 的布尔字段。通常,您需要添加以下字段到您的用户模型中:

  1. is_active = models.BooleanField(default=True, verbose_name='Is Active')

将此字段添加到您的模型后,再次运行迁移,应该不再出现此错误。这是因为 Django 的身份验证系统依赖于 'is_active' 字段来确定用户是否处于活动状态。

在此之后,您可以在您的自定义用户模型中进行其他必要的设置和更改,以适应您的应用程序的需求。如果您有其他问题或需要进一步的帮助,请随时告诉我。

英文:

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

  1. raise FieldError(
  2. 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

  1. class Usuario(AbstractBaseUser):
  2. centro = models.ForeignKey(Centro, on_delete=models.CASCADE, verbose_name='Centro o Unidad', blank=True, null=True)
  3. telefono = models.CharField(max_length=100, unique=True, verbose_name='Teléfono')
  4. rut = models.CharField(max_length=100, unique=True, verbose_name='RUT')
  5. profesion = models.CharField(max_length=150, verbose_name='Profesión')
  6. cargo = models.CharField(max_length=150, verbose_name='Cargo')
  7. nacionalidad = models.CharField(max_length=100, verbose_name='Nacionalidad')
  8. sexo = models.CharField(max_length=10, choices=SEXO_CHOICES ,verbose_name='Sexo')
  9. fecha_nacimiento = models.DateField(auto_now=False, auto_now_add=False,verbose_name='Fecha de nacimiento', blank=True, null=True)
  10. imagen_perfil = models.ImageField(upload_to='perfil/', verbose_name='Imágen de Perfil', max_length='255', blank=True, null=True)
  11. direccion = models.CharField(max_length=250, blank=True, null=True, verbose_name='Dirección')
  12. objects = UsuarioManager()
  13. USERNAME_FIELD = 'email'
  14. REQUIRED_FIELDS = ['email', 'nombre']
  15. def __str__(self):
  16. return self.first_name
  17. def get_email_user(self):
  18. return self.email.lower()
  19. def save(self, *args, **kwargs):
  20. self.email = self.email.lower()
  21. return super(Usuario, self).save(*args, **kwargs)
  22. def has_perm(self, perm, obj = None):
  23. return True
  24. def has_module_perms(self, app_label):
  25. return True
  26. @property
  27. def is_staff(self):
  28. return self.is_staff

This is the serializer

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

I was searching for a answer in several internet forums

答案1

得分: 1

自定义用户模型中,is_active 是 Django 的 AbstractBaseUser 模型中的必需字段。

您应该在 Usuario 模型中添加它,像这样:

  1. class Usuario(AbstractBaseUser):
  2. centro = models.ForeignKey(Centro, on_delete=models.CASCADE, verbose_name='Centro o Unidad', blank=True, null=True)
  3. telefono = models.CharField(max_length=100, unique=True, verbose_name='Teléfono')
  4. rut = models.CharField(max_length=100, unique=True, verbose_name='RUT')
  5. profesion = models.CharField(max_length=150, verbose_name='Profesión')
  6. cargo = models.CharField(max_length=150, verbose_name='Cargo')
  7. nacionalidad = models.CharField(max_length=100, verbose_name='Nacionalidad')
  8. sexo = models.CharField(max_length=10, choices=SEXO_CHOICES, verbose_name='Sexo')
  9. fecha_nacimiento = models.DateField(auto_now=False, auto_now_add=False, verbose_name='Fecha de nacimiento', blank=True, null=True)
  10. imagen_perfil = models.ImageField(upload_to='perfil/', verbose_name='Imagen de Perfil', max_length='255', blank=True, null=True)
  11. direccion = models.CharField(max_length=250, blank=True, null=True, verbose_name='Dirección')
  12. is_active = models.BooleanField(default=True)
  13. objects = UsuarioManager()
  14. USERNAME_FIELD = 'email'
  15. REQUIRED_FIELDS = ['email', 'nombre']
  16. def __str__(self):
  17. return self.first_name
  18. def get_email_user(self):
  19. return self.email.lower()
  20. def save(self, *args, **kwargs):
  21. self.email = self.email.lower()
  22. return super(Usuario, self).save(*args, **kwargs)
  23. def has_perm(self, perm, obj=None):
  24. return True
  25. def has_module_perms(self, app_label):
  26. return True
  27. @property
  28. def is_staff(self):
  29. return self.is_staff

然后运行迁移命令。

英文:

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:

<pre>
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')
<b>is_active = models.BooleanField(default=True)</b>
objects = UsuarioManager()

  1. USERNAME_FIELD = &#39;email&#39;
  2. REQUIRED_FIELDS = [&#39;email&#39;, &#39;nombre&#39;]
  3. def __str__(self):
  4. return self.first_name
  5. def get_email_user(self):
  6. return self.email.lower()
  7. def save(self, *args, **kwargs):
  8. self.email = self.email.lower()
  9. return super(Usuario, self).save(*args, **kwargs)
  10. def has_perm(self, perm, obj = None):
  11. return True
  12. def has_module_perms(self, app_label):
  13. return True
  14. @property
  15. def is_staff(self):
  16. return self.is_staff

</pre>

Then run migration commands.

huangapple
  • 本文由 发表于 2023年3月3日 23:03:36
  • 转载请务必保留本文链接:https://go.coder-hub.com/75628699.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定