Python Django-用户、用户配置文件和管理员
我正试图让Django管理界面显示有关我的个人资料的信息。它显示我的所有用户,但不显示个人资料信息。我不太清楚如何让它工作 我在谷歌快速搜索后发现了以下代码:Python Django-用户、用户配置文件和管理员,python,django,django-admin,Python,Django,Django Admin,我正试图让Django管理界面显示有关我的个人资料的信息。它显示我的所有用户,但不显示个人资料信息。我不太清楚如何让它工作 我在谷歌快速搜索后发现了以下代码: 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.si
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))
我看不出到底出了什么问题,但我知道这里有一个稍微简单一点的例子。这是任何正在工作的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)
这并不完全是对您的问题的回答,但根据,您可以在用户“表”中显示UserProfile中的信息。你可以让它成为可搜索的 看起来是这样的(修改C.Alan Zoppa的答案):
但是,如果您的profile类不再被称为
UserProfile
那么您可能会遇到搜索问题,缺少的逗号应该无关紧要。我怀疑问题在于您添加了一个新的admin.py
,但开发服务器没有识别它。如果重新启动开发服务器,它将看到新文件。您是否将管理员代码放在admin.py
的新应用程序包中,并将其添加到INSTALLED_APPS
?管理员代码在我的“auth”应用程序中的admin.py中。auth在已安装的应用程序中。我还正确设置了身份验证配置文件模块。身份验证似乎是一个坏名字,因为您可能会有冲突。也许我会更改它,但现在,所有的身份验证功能都可以正常工作,只是管理员不能profile@JPC这不重要,我知道。你确定你的管理员被抓了吗?我想它起作用了。我现在可以看到配置文件,当我点击一个用户!哇,谢谢。一个共同的想法如何添加用户配置文件信息到用户表中,这样我就可以按它排序/按它搜索?就像管理员应用程序中的排序一样?这可能是可能的,但您可能不得不做一些不可取的事情,比如对用户模型进行子类化。你最好尝试在模板中对其进行修补。回答得很好。非常感谢。我只是想你包括从django.contrib.auth.models导入的用户
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',)