继承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
相关产品推荐
相关产品推荐

