当前位置:   article > 正文

【django】使用AbstractUser对用户进行扩展的及在admin中注册小结

abstractuser

every blog every motto: There’s only one corner of the universe you can be sure of improving, and that’s your own self.
https://blog.csdn.net/weixin_39190382?spm=1010.2135.3001.5343

0. 前言

django中使用AbstractUser 对用户进行扩展小结,汇总了若干种方法

1. 正文

1.1 model.py

class UserInfo(AbstractUser):
    phone= models.CharField(max_length=12, verbose_name='phone')
    like= models.CharField(max_length=200, verbose_name='like')

    class Meta:
        db_table = 'userinfo'
        verbose_name = '用户'
        verbose_name_plural = '用户管理'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

1.2 setting.py

# 指定使用自定义的模型类:
AUTH_USER_MODEL = 'bapp.UserInfo'
  • 1
  • 2

1.3 迁移

迁移模型到数据库

$ python manage.py makemigrations
$ python manage.py migrate
  • 1
  • 2

1.4 注册

需要在admin.py里面注册一下,否则,用户组不会在页面上显示,如下图:
在这里插入图片描述

1.4.1 注册方法

在admin.py文件中

A. 使用默认的注册
admin.site.register(UserInfo,UserAdmin)
  • 1

出现了我们的“用户管理”,如下图
在这里插入图片描述

但是,点进用户的详细信息,并没有显示我们添加的字段

B. 方法一

使用如下方式,

@admin.register(UserInfo)
class ProfileAdmin(admin.ModelAdmin):
    list_display = ['username', 'phone', 'like']

  • 1
  • 2
  • 3
  • 4

如图所示,显示了我们添加的字段
在这里插入图片描述
但存在一个小问题,添加用户时,username不在第一行,

C. 方法二(未成功)

逻辑也很简单,就是新填两个额外的字段,

ADDITIONAL_FIELDS = ((None, {'fields': ('phone', 'like')}),)


class MyUserAdmin(UserAdmin):
    fieldsets = UserAdmin.fieldsets + ADDITIONAL_FIELDS
    add_fieldsets = UserAdmin.fieldsets + ADDITIONAL_FIELDS

admin.site.register(UserInfo, MyUserAdmin)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

但是,笔者并未实现成功,新填用户保存时,报如下错误,而且并未指定哪里出错,尝试多次,未果
在这里插入图片描述

D. 方法三

和上一种逻辑一样的,添加新的字段

fields = list(UserAdmin.fieldsets)
fields[0] = (None, {'fields': ('username', 'password', 'phone')})
UserAdmin.fieldsets = tuple(fields)

admin.site.register(UserInfo, UserAdmin)
  • 1
  • 2
  • 3
  • 4
  • 5

在用户详情中会出现,我们添加的字段phone,但是用户页面并没有出现,如下所示
在这里插入图片描述
在这里插入图片描述

E. 方法四

代码如下

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.utils.translation import gettext_lazy


class UserProfileAdmin(UserAdmin):
    list_display = ('username', 'last_login', 'is_superuser', 'is_staff', 'is_active', 'date_joined')
    fieldsets = (
        (None, {'fields': ('username', 'password', 'first_name', 'last_name', 'email')}),

        (gettext_lazy('User Information'), {'fields': ('phone','like')}),

        (gettext_lazy('Permissions'), {'fields': ('is_superuser', 'is_staff', 'is_active',
                                                  'groups', 'user_permissions')}),

        (gettext_lazy('Important dates'), {'fields': ('last_login', 'date_joined')}),
    )


admin.site.register(UserInfo, UserProfileAdmin)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

在这里插入图片描述
用户页显示的信息如下
在这里插入图片描述
用户页的详细信息,如下图所示
在这里插入图片描述
细心的读者可能发现了,用户的详细信息中的几个“板块”,分别对应上面代码中fieldsets 的若干个元素!!!

1.4.2 代码汇总

读者可选择合适自己的即可

# -------------------------------------------------
# 方法一
@admin.register(UserInfo)
class ProfileAdmin(admin.ModelAdmin):
    list_display = ['username', 'phone', 'like']

# --------------------------------------------------
# 方法二
ADDITIONAL_FIELDS = ((None, {'fields': ('phone', 'like')}),)

class MyUserAdmin(UserAdmin):
    fieldsets = UserAdmin.fieldsets + ADDITIONAL_FIELDS
    add_fieldsets = UserAdmin.fieldsets + ADDITIONAL_FIELDS


admin.site.register(UserInfo, MyUserAdmin)


# -----------------------------------------------------
# 方法三
fields = list(UserAdmin.fieldsets)
fields[0] = (None, {'fields': ('username', 'password', 'phone')})
UserAdmin.fieldsets = tuple(fields)

admin.site.register(UserInfo, UserAdmin)

# -------------------------------------------------------
# 方法四
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.utils.translation import gettext_lazy


class UserProfileAdmin(UserAdmin):
    list_display = ('username', 'last_login', 'is_superuser', 'is_staff', 'is_active', 'date_joined')
    fieldsets = (
        (None, {'fields': ('username', 'password', 'first_name', 'last_name', 'email')}),

        (gettext_lazy('User Information'), {'fields': ('phone','like')}),

        (gettext_lazy('Permissions'), {'fields': ('is_superuser', 'is_staff', 'is_active',
                                                  'groups', 'user_permissions')}),

        (gettext_lazy('Important dates'), {'fields': ('last_login', 'date_joined')}),
    )


admin.site.register(UserInfo, UserProfileAdmin)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

参考

[1] https://blog.csdn.net/qq_40655579/article/details/83903004
[2] https://www.thinbug.com/q/48011275
[3] https://zhuanlan.zhihu.com/p/141696501
[4] https://blog.csdn.net/qq_41954715/article/details/109574939
[5] https://blog.csdn.net/a54288447/article/details/126649938
[6] https://blog.csdn.net/a54288447/article/details/126649938

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/306483
推荐阅读
相关标签
  

闽ICP备14008679号