You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

继承Django User模型后获取姓名,及Employee类实现姓名查看方法

如何在Django中访问自定义User模型及关联Employee的姓名字段

一、在Employee类中查看关联User的first_name和last_name

首先,假设你的Employee模型是这样定义的(外键关联自定义User):

# hr/models.py
from django.db import models
from accounts.models import User

class Employee(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='employees')
    # 其他业务字段,比如employee_id、department等

你可以直接在Employee类中添加方法,通过外键关联的user对象直接访问first_name和last_name——因为你的自定义User继承了AbstractUser,而AbstractUser本身就内置了这两个字段:

class Employee(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='employees')
    # 其他字段...

    def get_user_full_name(self):
        """返回关联用户的全名"""
        return f"{self.user.first_name} {self.user.last_name}"

    def get_user_first_name(self):
        """返回关联用户的名字"""
        return self.user.first_name

    def get_user_last_name(self):
        """返回关联用户的姓氏"""
        return self.user.last_name

使用的时候,只要拿到Employee实例,就能调用这些方法:

emp = Employee.objects.first()
print(emp.get_user_full_name())  # 输出类似 "John Doe"

二、在自定义User模型中获取first_name和last_name

你的User模型继承了AbstractUser,而AbstractUser已经将first_name、last_name作为默认字段包含在内了,所以你不需要额外定义,直接在User实例上访问即可:

# 假设你获取了一个User实例
user = User.objects.get(username="johndoe")
# 直接访问字段
first_name = user.first_name
last_name = user.last_name
# 或者拼接全名
full_name = f"{user.first_name} {user.last_name}"

另外,注意到你写的__str__方法里有个小笔误(self.user...应该是self.username),可以修正为:

# accounts/models.py
from django.contrib.auth.models import AbstractUser
from django.db import models

class User(AbstractUser):
    additional_info = models.CharField(max_length=100, null=True, blank=True)
    provider = models.ManyToManyField('self', related_name='rel_doc', symmetrical=False)  # 多对多自关联建议加上symmetrical=False,除非你需要双向自动关联

    def __str__(self):
        return f"{self.first_name} {self.last_name} ({self.username})"

这样打印User实例时,就能清晰展示用户的姓名和用户名了。

内容的提问来源于stack exchange,提问作者Philip Mutua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:36:53