如何从 django 的用户模型扩展自定义模型后在自定义模型中获取 fname 和 lname?



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

最新更新