【问题标题】:User custom extend AbstractUser does not appear in 'Authentication' admin panel用户自定义扩展 AbstractUser 未出现在“身份验证”管理面板中
【发布时间】:2019-11-25 10:57:56
【问题描述】:

我知道这个问题在堆栈上很常见,我已经尝试了很多答案Like this one, and more alike

所以我的目标是扩展 User 以添加一些自定义字段。

在 models.py 我添加了以下内容

class MyUser(AbstractUser):
   bio = models.TextField(max_length=500, blank=True)
   location = models.CharField(max_length=30, blank=True)
   birth_date = models.DateField(null=True, blank=True)

   def __str__(self): # __str__ for Python 3, __unicode__ for Python 2
      return self.name

   class Meta:
      app_label = 'app_name'

在 admin.py 我添加了以下内容:

class CustomUserAdmin(UserAdmin):
   model = MyUser
   filter_horizontal = ('user_permissions', 'groups',)

admin.site.register(MyUser, CustomUserAdmin)

在 settings.py 我有以下内容:

AUTH_USER_MODEL = 'app_name.MyUser'

在 urls.py 中:

admin.autodiscover()

请注意,我已删除所有迁移并在这些更改后重新生成它们

app_name 在 settings.py 的 INSTALLED_APPS 中

我也尝试在 form.py 中添加自定义创建和更改表单,如下所示,但没有成功:

class CustomUserCreationForm(UserCreationForm):
   class Meta(UserCreationForm):
       model = MyUser
       fields = '__all__'
class CustomUserChangeForm(UserChangeForm):
   class Meta:
       model = MyUser
       fields = '__all__'

需要注意的是,在我的数据库中,用户架构已更新为新字段!

但问题是它没有出现在管理面板部分

提前感谢您的帮助

【问题讨论】:

  • 您是否将app_name 添加到INSTALLED_APPS 设置中?
  • 是的 :) 我已经更新了帖子

标签: django python-3.x django-models


【解决方案1】:

docs 建议使用与默认 User 模型的 OneToOne 关系来扩展它。尝试遵循文档,看看它是否有效。
您从头开始创建了一个新的用户模型 (click),但似乎遗漏了很多必需的东西。

【讨论】:

  • 感谢您的帮助 :) 确实,一对一的方法有效,但它出现在管理面板中自己的部分。所以我想扩展本机用户对象。您发布的另一个链接是扩展 AbstractBaseUser,但这有点矫枉过正,因为我只想添加一些字段。所以 AbstractUser 扩展是最合适的。
  • 您是否按照文档中的描述实施了管理员更改?他们取消注册默认 UserAdmin 并将其替换为具有新字段作为内联的新用户。它仍应显示在索引中的 auth 应用程序下方,Groups 上方。
猜你喜欢
  • 2018-02-19
  • 2021-08-21
  • 1970-01-01
  • 2015-06-20
  • 1970-01-01
  • 2016-06-27
  • 2015-02-24
  • 1970-01-01
相关资源
最近更新 更多