在djang的管理页面中为用户添加字段

2024-05-19 17:39:09 发布

您现在位置:Python中文网/ 问答频道 /正文

这个问题似乎很简单,但我找不到解决办法。我需要在django中扩展我的用户模型(添加电话号码),我选择了创建另一个名为UserInfo的模型的方法,它与用户模型1到1相关。它工作得很好,唯一的问题是我不能让用户信息字段(电话号码)显示在管理面板的用户页面上。我尝试了:

from app.models import UserInfo
from django.contrib import admin
from django.contrib.auth.models import User

class UserInfoInline(admin.TabularInline):
    model = UserInfo
class UserAdmin(admin.ModelAdmin):
    inlines = [UserInfoInline,]

admin.site.register(UserInfo)

编辑: 目前的情况是:

^{pr2}$

但是我仍然得到错误,这次是从唯一的django模块:

python3.6/site-packages/django/contrib/admin/sites.py", line 109, in register
    raise AlreadyRegistered('The model %s is already registered' % model.__name__)
django.contrib.admin.sites.AlreadyRegistered: The model User is already registered

Tags: django用户from模型importmodeladminmodels
2条回答

你需要重新注册用户管理员。在

try:
    admin.site.unregister(User)
except admin.sites.NotRegistered:
    pass
admin.site.register(User, UserAdmin)

您应该做的是注销默认用户并注册UserAdmin

from app.models import UserInfo
from django.contrib import admin
from django.contrib.auth.models import User

class UserInfoInline(admin.TabularInline):
    model = UserInfo
class UserAdmin(admin.ModelAdmin):
    inlines = [UserInfoInline,]

# below lines should be added
admin.site.unregister(User)
admin.site.register(User, UserAdmin)

尝试删除用户信息的注册部分

编辑: 试试下面这个例子,这是一个有效的例子:

模型.py

^{pr2}$

管理员py

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User

from .models import Profile

class ProfileInline(admin.StackedInline):
    model = Profile
    can_delete = False
    verbose_name_plural = 'Profile'
    fk_name = 'user'

class CustomUserAdmin(UserAdmin):
    inlines = (ProfileInline, )

    def get_inline_instances(self, request, obj=None):
        if not obj:
            return list()
        return super(CustomUserAdmin, self).get_inline_instances(request, obj)


admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)

你可以阅读更多关于它的here。在

相关问题 更多 >