使用扩展字段自定义Django用户表视图

时间:2013-10-29 03:11:16

标签: python django django-admin

所以我想在auth / users页面上显示不同的列

我已将我的用户模型扩展到我的models.py

class InsiderUser(models.Model):
    user = models.OneToOneField(User)
    company_name = models.CharField(max_length=100L, blank=True)

我可以通过将以下内容放在admin.py中来编辑管理员中的字段:

class InsiderUserInline(admin.StackedInline):
    model = InsiderUser
    can_delete = False
    verbose_name_plural = 'insideruser'

# Define a new User admin
class UserAdmin(UserAdmin):
    inlines = (InsiderUserInline, )

但是更改list_display我遇到了一些问题:

class UserAdmin(UserAdmin):
    inlines = (InsiderUserInline, )
    list_display = ('email', 'first_name', 'last_name', InsiderUser)

这只是告诉我有一个InsiderUser对象,这让我觉得我在正确的道路上,因为以下所有都产生了错误:

class UserAdmin(UserAdmin):
    inlines = (InsiderUserInline, )
    list_display = ('email', 'first_name', 'last_name', InsiderUser.company_name)

class UserAdmin(UserAdmin):
    inlines = (InsiderUserInline, )
    list_display = ('email', 'first_name', 'last_name', InsiderUser[company_name])

1 个答案:

答案 0 :(得分:3)

由于公司名称存储在单独的表中,您可以使用下面给出的自定义管理方法显示它。

class UserAdmin(UserAdmin):
    inlines = (InsiderUserInline, )
    list_display = ('email', 'first_name', 'last_name', 'display_company_name', )

    def display_company_name(self, request):
        if InsiderUser.objects.filter(user__id = request.id):
            return InsiderUser.objects.get(user__id = request.id).company_name
        else:
            return None
    display_company_name.short_description = 'Company Name'

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