如果要在Django中存储有关用户(django.contrib.auth.models.User)的额外信息,可以使用漂亮的AUTH_PROFILE_MODULE来插入“profile”模型。然后每个用户获取一个配置文件这一切都在这里描述:
现在,假设我创建了一个名为Accounts的应用程序,其模型名为UserProfile,并将其注册为我的用户的配置文件模型。 如何在管理界面中内联编辑配置文件以编辑用户(反之亦然)?
答案 0 :(得分:29)
我建议稍微改进版本的André解决方案,因为它打破了/ admin / auth / user /中的列表视图:
from django.contrib import admin
from member.models import UserProfile
from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin as AuthUserAdmin
class UserProfileInline(admin.StackedInline):
model = UserProfile
max_num = 1
can_delete = False
class UserAdmin(AuthUserAdmin):
inlines = [UserProfileInline]
# unregister old user admin
admin.site.unregister(User)
# register new user admin
admin.site.register(User, UserAdmin)
答案 1 :(得分:16)
我建议对罗伯特的解决方案进行另一项改进:
from django.contrib import admin
from member.models import UserProfile
from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin as AuthUserAdmin
class UserProfileInline(admin.StackedInline):
model = UserProfile
max_num = 1
can_delete = False
class UserAdmin(AuthUserAdmin):
def add_view(self, *args, **kwargs):
self.inlines = []
return super(UserAdmin, self).add_view(*args, **kwargs)
def change_view(self, *args, **kwargs):
self.inlines = [UserProfileInline]
return super(UserAdmin, self).change_view(*args, **kwargs)
# unregister old user admin
admin.site.unregister(User)
# register new user admin
admin.site.register(User, UserAdmin)
如果没有对UserAdmin进行此更改,自定义UserProfileInline部分将显示在“添加用户”屏幕上,该屏幕应该是要求输入用户名和密码。如果您在保存之前更改了该屏幕上的任何配置文件数据(远离默认值),您将收到“重复键”数据库错误。
答案 2 :(得分:14)
嗯,事实证明,一旦你知道如何做,这很容易。这是我的myapp / accounts / admin.py:
from django.contrib import admin
from myapp.accounts.models import UserProfile
from django.contrib.auth.models import User
class UserProfileInline(admin.StackedInline):
model = UserProfile
max_num = 1
can_delete = False
class AccountsUserAdmin(admin.UserAdmin):
inlines = [UserProfileInline]
# unregister old user admin
admin.site.unregister(User)
# register new user admin that includes a UserProfile
admin.site.register(User, AccountsUserAdmin)
用户的默认admin.UserAdmin
ModelAdmin类已取消注册,并且在其位置注册了指定内联UserProfile
的新类。我以为我应该分享。
答案 3 :(得分:0)
您必须考虑添加和更改表单。另外,在尝试创建用户时,您将获得用户不能为无错误。以下内容已经过测试,适用于1.3:
class TeamInline(admin.StackedInline):
model = Team
fk_name = 'user'
max_num = 1
can_delete = False
class TeamUserAdmin(UserAdmin):
list_display = ('username', 'email', 'company', 'expertise', 'contact_email', 'contact_phone', 'twitter', 'facebook', 'last_login_short', 'options')
list_select_related = True
def add_view(self, *args, **kwargs):
self.inline_instances = []
return super(TeamUserAdmin, self).add_view(*args, **kwargs)
def change_view(self, *args, **kwargs):
self.inline_instances.append(TeamInline(self.model, self.admin_site))
return super(TeamUserAdmin, self).change_view(*args, **kwargs)