Django 外键引用User模型时显示username的解决方法

发布时间 2023-04-04 17:06:33作者: StarDarkMonarch

问题需求:在Django Admin后台模型管理中,引用User外键的字段,显示的是username(用户名)。下拉菜单要显示姓名(last_name和first_name,外加username保持唯一性、可辨别性)。

使用代理模型(proxy model)

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

# 创建代理模型,继承于User模型
class MyUser(User):
    class Meta:
        proxy = True
    # Python2使用__unicode__方法,Python3使用__str__方法。
    def __str__(self):
        return self.last_name + self.first_name + self.username

# 正常的[仅博客园]业务模型
class model_name(models.Model):
  name = models.CharField(
          max_length=128,
          verbose_name='客户全称'
      )
  tax = models.CharField(
        max_length=18,
        verbose_name='统一信用代码'
    )
  # [SDM]外键字段,引用的是代理模型
  owner = models.ForeignKey(
        MyUser,
        on_delete=models.PROTECT,
        verbose_name='归属人'
    )

参考:https://stackoverflow.com/questions/18911410/
参考回答因为年限的问题(2013年的回答),其内容的中的__unicode__方法仅适用于Python2,在Python3流行的现在已经不适用了。
本随笔仅供参考,不得全盘复制,仅发表于博客园[SDM]!!