我想在一个模型序列化器中序列化dept_name及其“ id”。我应该怎么做?

时间:2019-11-02 09:04:25

标签: django django-models django-rest-framework django-serializer

我想在部门模型的Employee Model Serializer中序列化“部门名称”(dept_name)以及部门ID(id)

在Employee Serializer中,我要序列化“部门名称”和“部门ID”模型。我在Employee Serializer的Meta类中也提到了部门模型

模型

class Department(models.Model):
    dept_name = models.CharField(max_length=10)


class Employee(models.Model):
    emp_name = models.CharField(max_length=15)
    email = models.EmailField(unique=True)
    password = models.CharField(max_length=14)
    designation = models.CharField(max_length=20)
    dept_id = models.ForeignKey(Department, on_delete=models.SET_NULL, null=True, blank=True)

    class Meta:
        ordering = ('id',)

    def __str__(self):
        return self.emp_name

SERIALIZER

class DepartmentSerializer(serializers.ModelSerializer):

    class Meta:
        model = Department
        fields = [
            'id',
            'dept_name',
        ]


class EmployeeSerializer(serializers.ModelSerializer):
    dept_id = serializers.SlugRelatedField(queryset=Department.objects.all(), slug_field='dept_name')
    deptname = DepartmentSerializer()

    class Meta:
        model = Employee,Department
        fields = [
            'id',
            'emp_name',
            'email',
            'password',
            'designation',
            'dept_id',
            'deptname',
        ]

2 个答案:

答案 0 :(得分:0)

在您的员工查询集中记住select_related('dept')。

<canvas id="canvas"></canvas>

答案 1 :(得分:0)

您可以在EmployeeSerializer中使用depth in。它将返回所有部门对象的字段。

================= depth = 1 =>返回一级深度。 depth = 2 =>返回两个深度级别。

像这样:

class DepartmentSerializer(serializers.ModelSerializer):

    class Meta:
        model = Department
        fields = '__all__'


class EmployeeSerializer(serializers.ModelSerializer):

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