首页 > 解决方案 > 我如何使用 drf 序列化程序将数据序列化为 json

问题描述

我有如下数据模型:

from django.db import models


class Student(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    email = models.EmailField()

    def __str__(self):
        return self.first_name + ' ' + self.last_name


class Course(models.Model):
    name = models.CharField(max_length=255)
    description = models.TextField()
    start_date = models.DateField(null=True)
    end_date = models.DateField(null=True)

    def __str__(self):
        return self.name


class CourseParticipant(models.Model):
    course = models.ForeignKey(Course, related_name='courses', on_delete=None)
    student = models.ForeignKey(Student, related_name='students', on_delete=None)
    completed = models.BooleanField(null=True, default=False)

    def __str__(self):
        return self.course

我有一些序列化程序,例如:

class CourseSerializer(serializers.ModelSerializer):
    class Meta:
        model = Course
        fields = ('name', 'end_date', 'start_date')

我需要在 json 中返回数据,例如:

{
    "courses": [
        {
            "name": "Math",
            "end_date": "2019-06-26",
            "start_date": "2019-06-26",
            "participant_students_count: 10
        }
    ]
}

如何获取“participant_students_count”并将其数据以 json 格式与其他字段一起返回。

感谢帮助!

标签: djangodjango-rest-framework

解决方案


class CourseSerializer(serializers.ModelSerializer):
    participant_students_count = serializers.SerializerMethodField()

    def get_participant_students_count(self, obj):
        return CourseParticipant.objects.filter(course=obj).count()

    class Meta:
        model = Course
        fields = ('name', 'end_date', 'start_date', 'participant_students_count')

推荐阅读