首页 > 解决方案 > Django 在管理字段中将用户显示为用户全名

问题描述

尝试将外来用户显示为使用全名时卡住了

模型.py

class Customer(models.Model):
  name = models.charfield(max_length=100)
  sales = models.foreignkey(User, on_delete=models.CASADE)

管理员.py

@admin.register(Customer)
  list_display = ('name', 'sales')

不,默认情况下销售作为用户外国显示作为用户名。但我想将其显示为名字或全名

标签: django

解决方案


已编辑

您可以在 ModelAdmin 中添加一个方法,正如@dirkgroten 在下面的评论中提到的:

from django.contrib import admin

@admin.register(Customer)
class CustomerAdmin(admin.ModelAdmin)
    list_display = ('name', 'sales_first_name')
    def sales_first_name(self, obj):
        return obj.sales.first_name + obj.sales_last_name

好处是您可以根据需要处理空值,如果不需要您的外键,例如

def sales_first_name(self, obj):
    if obj.sales:
        return obj.sales.first_name
    else:
        return None # or return 'nobody'

旧答案

(正如评论中提到的那样,它不起作用(除非你使用像django-related-admin这样的插件))

也许sales__first_name改用?

list_display = ('name', 'sales__first_name')

这样 django 将评估用户对象的 first_name 属性,而不是返回默认的字符串表示(由__str__用户模型中的方法定义,它只返回username)。


推荐阅读