使用 AbstractUser 的 Django 自定义用户
Django custom user with AbstractUser
from django.contrib.auth import get_user_model
from django.contrib.auth.models import AbstractUser
class MyUser(AbstractUser):
pass
class Landlord(models.Model):
user = models.OneToOneField(get_user_model(), on_delete=models.CASCADE)
#other fields
def __str__(self):
# **Error is here**
return self.user.email
当我使用用户的电子邮件字段时出现此错误:"Instance of 'OneToOneField' has no 'email' member"
错误的原因是什么?(以及AbstractUser中有哪些字段class?)
我该如何修复错误。
您应该确保在 settings.py
文件中指定您的用户 class,例如
AUTH_USER_MODEL = 'appname.MyUser'
将 appname
替换为您的应用名称。
或者您使用 MyUser
而不是 get_user_model()
。
我使用的是 AbstractBaseUser 而不是 AbstractUser,但问题并未出现。通过阅读 django.contrib.auth.models 的代码,您还可以了解哪些字段已经实现以及如何实现。可以通过按住控制键并单击导入地址来完成。
from django.contrib.auth import get_user_model
from django.contrib.auth.models import AbstractUser
class MyUser(AbstractUser):
pass
class Landlord(models.Model):
user = models.OneToOneField(get_user_model(), on_delete=models.CASCADE)
#other fields
def __str__(self):
# **Error is here**
return self.user.email
当我使用用户的电子邮件字段时出现此错误:"Instance of 'OneToOneField' has no 'email' member"
错误的原因是什么?(以及AbstractUser中有哪些字段class?) 我该如何修复错误。
您应该确保在 settings.py
文件中指定您的用户 class,例如
AUTH_USER_MODEL = 'appname.MyUser'
将 appname
替换为您的应用名称。
或者您使用 MyUser
而不是 get_user_model()
。
我使用的是 AbstractBaseUser 而不是 AbstractUser,但问题并未出现。通过阅读 django.contrib.auth.models 的代码,您还可以了解哪些字段已经实现以及如何实现。可以通过按住控制键并单击导入地址来完成。