首页 > 解决方案 > 创建具有两级父表的django rest框架ViewSet

问题描述

我有以下课程目录模型:

ACourseInstance是“课程”的运行,它是课程目录中的一个条目。Department每门课程都有其所属的外键。每周一次的课程会议都存储在CourseInstanceTime. 以下简化模型:

class Department(models.Model):
    """Academic Department"""

    name = models.CharField(max_length=30, unique=True)

class Course(models.Model):
    """Courses in the course catalog"""

    course_name = models.CharField(max_length=30, unique=True)
    department = models.ForeignKey(Department, on_delete=models.PROTECT)
    course_number = models.DecimalField(decimal_places=0, max_digits=3, unique=True)

    class Meta:
        unique_together = (("department", "course_number"),)

class CourseInstance(models.Model):
    """A Scheduled running of a particular coursee"""

    start_date = models.DateField(help_text='Course Start Date', verbose_name='Start Date')
    end_date = models.DateField(help_text='Course Start Date', verbose_name='Start Date')
    course = models.ForeignKey(Course, on_delete=models.deletion.CASCADE)

class CourseInstanceTime(models.Model):

    day = models.CharField(max_length=3)
    start_time = models.TimeField()
    end_time = models.TimeField()
    course_instance = models.ForeignKey(CourseInstance, on_delete=models.deletion.CASCADE)

我想创建一个CourseInstance包含部门名称的视图集。我可以使用 aSlugField来包含课程编号,如下所示:

类 CourseInstanceSerializer(serializers.ModelSerializer): course = serializers.SlugRelatedField( many = False, read_only = False, slug_field = 'course_number', queryset = models.Course.objects.all())

class Meta:
    model = models.Course
    fields = (
        'id', 
        #'department',
        'course', 
        'start_date',
        'end_date',
    )

我不知道如何做到这一点。

标签: django-rest-framework

解决方案


您可以将参数传递给您source的序列化器字段,例如,如果您想向您的.department_nameCourseInstanceSerializerdepartment_name = serializers.CharField(source='course.department.name')department = DepartmentSerializer(source='course.department')


推荐阅读