Я хочу сериализовать имя dept_name, а также его "id" в одном сериализаторе модели. как мне это сделать? - PullRequest
0 голосов
/ 02 ноября 2019

Я хочу сериализовать «Название отдела» (dept_name), а также идентификатор отдела (id) в Сериализаторе модели сотрудника из модели отдела

В Сериализаторе сотрудника я также хочу сериализовать «Название отдела»как модели "Dept ID". Я упомянул модель отдела в классе Meta Serializer сотрудников, а также

MODELS

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 голосов
/ 03 ноября 2019

вы можете использовать глубину в EmployeeSerializer. Он вернет все поля объекта отдела.

========================== = 1 => возвращает один уровень глубины. глубина = 2 => возвращает два уровня глубины.

, например:

class DepartmentSerializer(serializers.ModelSerializer):

    class Meta:
        model = Department
        fields = '__all__'


class EmployeeSerializer(serializers.ModelSerializer):

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

0 голосов
/ 02 ноября 2019

Не забудьте выбрать select_related ('dept') в вашем наборе запросов Employee.

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)

    # .._id suffix django will implement automatically
    dept = models.ForeignKey(Department, on_delete=models.SET_NULL, null=True, blank=True) 

    class Meta:
        ordering = ('id',)

    def __str__(self):
        return self.emp_name


class DepartmentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Department
        fields = ('id', 'dept_name')


class EmployeeSerializer(serializers.ModelSerializer):
    dept = DepartmentSerializer()

    class Meta:
        model = Employee
        fields = ('id',
                  'emp_name',
                  'email',
                  'password',
                  'designation',
                  'dept')
...