【问题标题】:Creating a django rest framework ViewSet that has two levels of parent tabless创建具有两级父表的django rest框架ViewSet
【发布时间】:2019-07-15 18:39:11
【问题描述】:

我有以下课程目录模型:

  • 部门
  • 课程
  • 课程实例
  • 课程实例时间

CourseInstance 是“课程”的运行,它是课程目录中的一个条目。每门课程都有一个指向它所属的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 视图集。我可以使用SlugField 来包含课程编号,如下所示:

类 CourseInstanceSerializer(serializers.ModelSerializer): 当然=序列化程序.SlugRelatedField( 许多=错误, 只读 = 假, 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


    【解决方案1】:

    您可以将source 参数传递给您的序列化器字段,例如,如果您想将department_name 添加到您的CourseInstanceSerializer,您可以通过添加字段department_name = serializers.CharField(source='course.department.name') 来实现,或者如果您想知道可以使用department = DepartmentSerializer(source='course.department')的部门信息。

    【讨论】:

    • 好的,看来我需要重写序列化程序和视图集上的 create() 以使帖子按我想要的方式工作,但这适用于读取。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 2016-06-28
    • 2016-05-27
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 2020-05-06
    相关资源
    最近更新 更多