Как встроить редактировать профиль пользователя django в интерфейсе администратора? - PullRequest
19 голосов
/ 04 августа 2010

Если вы хотите сохранить дополнительную информацию о пользователе (django.contrib.auth.models.User) в Django, вы можете использовать изящный AUTH_PROFILE_MODULE для подключения модели «профиля».Каждый пользователь затем получает профиль.Здесь все описано:

Теперь, скажем, я создал приложение под названием учетные записи с моделью под названиемUserProfile и зарегистрирован как модель профиля для моих пользователей. Как встроить редактирование профиля в интерфейс администратора для редактирования пользователей (или наоборот)?

Ответы [ 4 ]

29 голосов
/ 23 января 2011

Я предлагаю немного улучшенную версию решения Андре, поскольку оно нарушает представление списка в / 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)
16 голосов
/ 27 апреля 2012

Я предлагаю еще одно усовершенствование решения Роберта:

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 будет отображаться на экране «Добавить пользователя», который должен запрашивать имя пользователя.и пароль.И если вы измените какие-либо данные профиля на этом экране (в отличие от настроек по умолчанию) перед сохранением, вы получите ошибку базы данных «дубликат ключа».

14 голосов
/ 04 августа 2010

Ну, получается, что это довольно легко, если вы знаете, как это сделать. Это мой 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. Просто подумал, что должен поделиться.

0 голосов
/ 27 сентября 2012

Вы должны рассмотреть форму добавления и изменения. В противном случае вы получите пользователь не может быть ошибка при попытке создать пользователя. Следующее было протестировано и работает в 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...