Skip to main content
 首页 » 编程设计

python之使用扩展字段自定义 Django 用户 TableView

2024年08月28日2798°冷暖

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

我通过将它放在我的 models.py 中扩展了我的用户模型

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

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

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]) 

请您参考如下方法:

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

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)