Django - пользователь, профиль пользователя и администратор - PullRequest
10 голосов
/ 30 декабря 2010

Я пытаюсь получить интерфейс администратора Django для отображения информации о моем профиле. На ней отображаются все мои пользователи, но нет информации профиля. Я не совсем уверен, как заставить его работать.

Я нашел этот код после быстрого поиска в Google:

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

admin.site.unregister(User)

class UserProfileInline(admin.StackedInline):
    model = UserProfile

class UserProfileAdmin(UserAdmin):
    inlines = [UserProfileInline]

admin.site.register(User, UserProfileAdmin)

Однако я не думаю, что это сработало. Когда я захожу на страницу администратора, я вижу пользователей, группы и сайты. Я нажимаю «Пользователи» и вижу список всех моих пользователей, но без указания какого-либо профиля. Нажатие на пользователя показывает мне информацию об этом пользователе, но по-прежнему нет информации профиля.

Если это поможет, вот мое объявление модели:

from django.db import models
from django.contrib.auth.models import User

class UserProfile(models.Model):
    company = models.CharField(max_length=30)
    user = models.ForeignKey(User, unique=True)

И мой регистрационный код:

def register(request):
    if request.method == 'POST':
        uf = UserForm(request.POST)
        upf = UserProfileForm(request.POST)
        if uf.is_valid() and upf.is_valid():
            user = uf.save()
            userprofile = upf.save(commit=False)#need to get the user profile object first
            userprofile.user = user #then set the user to user
            userprofile.save() #then save to the database
            return HttpResponseRedirect('/auth/login/')
    else:
        uf = UserForm()
        upf = UserProfileForm()
    return render_to_response('register.html', dict(userform=uf,userprofileform=upf),context_instance=RequestContext(request))

Ответы [ 3 ]

25 голосов
/ 30 декабря 2010

Я не могу точно понять, что не так, но вот немного более простой пример, который, как я знаю, работает.Поставь это любой рабочий admin.py.Попробуйте добавить запятую в свою строку - некоторые вещи ломаются без нее.

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

admin.site.unregister(User)

class UserProfileInline(admin.StackedInline):
    model = UserProfile

class UserProfileAdmin(UserAdmin):
    inlines = [ UserProfileInline, ]

admin.site.register(User, UserProfileAdmin)
6 голосов
/ 18 февраля 2012

Это не совсем ответ на ваш вопрос, НО, согласно документации Django Admin , вы можете отображать информацию из UserProfile в своей пользовательской «таблице».И вы можете сделать его доступным для поиска.

Это выглядело бы примерно так (модифицирующий ответ от C. Alan Zoppa):

class UserProfileAdmin(UserAdmin):
    inlines = [ UserProfileInline, ]
    def company(self, obj):
        try:
            return obj.get_profile().company
        except UserProfile.DoesNotExist:
            return ''
    list_display = UserAdmin.list_display + ('company',)
    search_fields = UserAdmin.search_fields + ('userprofile__company',)

Возможно, у вас возникла проблема с поиском, если ваш класс профилябольше не называется UserProfile.

3 голосов
/ 13 августа 2012

Отсутствующая запятая не должна иметь значения.Я подозреваю, что проблема в том, что вы добавили новый admin.py, но сервер разработки не распознал его.Если вы перезапустите сервер разработки, он увидит новый файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...