Mwi*_*ert 1 django django-models python-3.x
我正在学习 python Django。我创建了一个自定义用户模型并且它正在工作,但是每当我通过 Django 管理员访问任何用户的个人资料时,我都会收到此错误:
Exception Value:
'date_joined' cannot be specified for UserProfile model form as it is a non-editable field. Check fields/fieldsets/exclude attributes of class UserAdminModel.
Run Code Online (Sandbox Code Playgroud)
这是我的自定义 UserProfile 模型:
class UserProfile(AbstractBaseUser, PermissionsMixin):
""" A model for authors and readers."""
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
username = models.CharField(max_length=255, unique=True)
email = models.EmailField(max_length=255, unique=True)
password = models.CharField(max_length=255)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
date_joined = models.DateTimeField(auto_now_add=True)
REQUIRED_FIELDS = ['email', 'password']
USERNAME_FIELD = 'username'
objects = UserProfileManager()
def __str__(self):
return self.username
Run Code Online (Sandbox Code Playgroud)
我正在使用默认的 Django AdminModel:
class UserAdminModel(UserAdmin):
pass
Run Code Online (Sandbox Code Playgroud)
小智 5
Django 管理站点希望该date_joined字段是可编辑的 - 但您的自定义用户模型不允许 - 因为auto_now_add始终设置当前日期。
这种行为是已知的并记录在案:
按照目前的实施,将 auto_now 或 auto_now_add 设置为 True 将导致该字段设置为 editable=False 和 blank=True 。
class UserAdminModel(UserAdmin):
readonly_fields = ["date_joined"]
Run Code Online (Sandbox Code Playgroud)
class UserProfile(AbstractBaseUser, PermissionsMixin):
# [..]
date_joined = models.DateTimeField(default=timezone.now)
Run Code Online (Sandbox Code Playgroud)
你可能想走第二条路。我没有检查您在自定义用户模型中覆盖的任何其他字段是否与 Django 默认管理员不兼容。如果您进行更改,请使它们具有足够的意义,以保证更新相关表单或管理视图的额外工作。