i具有accounts.models
中的User
模型类。然后,我在hr.models
中创建了一个Employee
类,并将user
添加为ForeignKeyField
。我如何使在Employee
类中实现一种方法以查看名字和姓氏?
class User(AbstractUser):
additional_info = models.CharField(max_length=100, null=True, blank=True)
provider = models.ManyToManyField('self', related_name='rel_doc')
def __str__(self):
return "%s %s (%s)" % (self.first_name, self.last_name, self.username)
在hr.models
中:
class Employee(models.Model):
user = models.ForeignKey(User, related_name='users',
on_delete=models.CASCADE)
gender = models.ForeignKey(Sex)
dob = models.DateField(blank=True, null=True)
company = models.ForeignKey(
'hr.Company',
verbose_name='Company',
related_name='companies',
null=True, blank=True,
)
def __str__(self):
return str(self.user)
您对用户有外键,只需使用点表示法:
print(self.user.firstname, self.user.lastname)
将以下方法添加到员工类
def get_first_name(self):
return self.user.first_name
def last_name(self):
return self.user.last_name
def get_full_name(self):
return self.user.get_full_name()
请参阅此链接以获取更多详细信息
in Serializers.py我导入: from django.contrib.auth import get_user_model
然后在EmployeeSerializer
类中定义user = UserSerializer()
from django.contrib.auth import get_user_model
class EmployeeSerializer(serializers.ModelSerializer):
user = UserSerializer()
class Meta:
model = Employee
# fields = ['id', 'user', 'dob', 'gender', 'hr_number', 'company', 'marital_status', 'identification_type',
# 'tax_id_number','joining_date', 'designation', 'department']
fields = '__all__'
之后,在视图中,我只是定义了:
class ListEmployees(generics.ListAPIView):
"""
List all employees.
"""
queryset = Employee.objects.all()
serializer_class = EmployeeSerializer