首页 > 解决方案 > Django REST FRAMEWORK中的外键关系

问题描述

我想创建一个员工对象,其属性包括预先存在的外键(部门)。当我看到员工 api 时..我正在获取部门 ID 而不是部门名称.. 在此处输入图像描述.. 请帮忙

模型.py

class Department(models.Model):
name = models.CharField(max_length= 20)
def __str__(self):
    return self.name

class Employee(models.Model):
employee_name = models.CharField(max_length= 20)
surname = models.CharField(max_length= 20)
address = models.CharField(max_length  = 50)
qualification = models.CharField(max_length = 30)
contact_num = PhoneNumberField()
department = models.ForeignKey(Department, on_delete=models.PROTECT)
def __str__(self):
    return self.employee_name

序列化.py

class DepartmentSerializer(serializers.ModelSerializer):
""" Serializer to represent the Chain model """
    class Meta:
        model = Department
        fields = '__all__'


class EmployeeSerializer(serializers.ModelSerializer):
    """ Serializer to represent the Chain model """
    class Meta:
        model = Employee
        fields = '__all__'

标签: pythondjangodjango-rest-framework

解决方案


你可以使用StringRelatedField()相同的。

class EmployeeSerializer(serializers.ModelSerializer):
    """ Serializer to represent the Chain model """
    department = serializers.StringRelatedField()
    class Meta:
        model = Employee
        fields = '__all__'

StringRelatedField可用于使用其__unicode__or__str__方法表示关系的目标。



如果您希望查看与该 FK 相关的所有详细信息,请depth按以下方式使用

class EmployeeSerializer(serializers.ModelSerializer):
    """ Serializer to represent the Chain model """

    class Meta:
        model = Employee
        fields = '__all__'
        depth = 1

推荐阅读