我正在学习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.
这是我的自定义用户配置文件模型:
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
我正在使用默认的 Django AdminModel:
class UserAdminModel(UserAdmin):
pass
Django 管理站点希望 date_joined
字段是可编辑的 - 但您的自定义用户模型不允许这样做 - 因为auto_now_add
总是设置当前日期。
此行为是已知的并记录在案:
如当前实现的那样,将auto_now或auto_now_add设置为 True 将导致字段设置可编辑=假和空白=真。
- 要么你明确地进行更改,告诉 Django 它确实不是可编辑的:
class UserAdminModel(UserAdmin):
readonly_fields = ["date_joined"]
- 或者还原你的更改,回到 Django 默认设置的该字段可编辑:
class UserProfile(AbstractBaseUser, PermissionsMixin):
# [..]
date_joined = models.DateTimeField(default=timezone.now)
您可能想走第二条路线。我还没有检查您在自定义用户模型中覆盖的任何其他字段是否与 Django 默认管理员不兼容。如果进行了更改,请使其足够有意义,以保证更新相关窗体或管理视图的额外工作。