4Manuals

  • PDF Cloud HOME

DJANGO:如何编写自定义序列化器,以从相关模型中添加字段? Download

    Django Rest Framework-根据字段内容进行序列化 一旦将字段变成Django中的属性,如何防止将字段从模型中“删除”? 在MacOS中启动Django服务器时,为什么会出现错误? Django从GET 如何显示最后N个数据 我的django的应用服务器处理时间比笔记本电脑的处理时间长 Django按类别获取喜欢的人数 我正在为ChainedManyToManyField使用django smart selects库,但是该字段不显示下拉列表? JavaScript加载功能脚本以显示Django静态图像 如何将初始数据从QuerySet传递到formset?

型号:

class Subject(models.Model):
    db = 'default'
    subjectName = models.CharField(max_length = 100)
    cohortID = models.ForeignKey(Cohort, on_delete=models.CASCADE, related_name='subjects')
    teacherID = models.ForeignKey(Teacher, on_delete=models.CASCADE, related_name='subjects', null=True)

class Cohort(models.Model):
    db = 'default'
    school_creator = models.ForeignKey(CustomUser, on_delete = models.CASCADE, related_name='cohorts')
    mainTeacherID = models.ForeignKey(CustomUser, on_delete=models.CASCADE, null=True, related_name='mainCohorts')
    class_name = models.CharField(max_length = 100)

序列化器:

class SubjectSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Subject
        fields = ('subjectName', 'teacherID', 'pk',)

这是上面使用序列化程序的响应:

{"subjectName":"Maths","teacherID":2,"pk":4}

我想要:

{"subjectName":"Maths","teacherID":2,"pk":4, "cohortName" : "4 B"}

cohortName应该来自模型Cohort.class_name。 我猜是有可能这样做的,因为Subject是通过ForeignKey Subject.cohortID连接到同类群组的。 我尝试添加一些自定义序列化器:

class SubjectCohortSerializer(serializers.ModelSerializer):
    cohortName = serializers.SerializerMethodField(read_only=True)
    class Meta:
        model = models.Subject
        fields = ('subjectName', 'teacherID', 'pk','cohortName')
    def get_cohortName(self, subject):
        return models.Cohort.objects.get(pk=self.context['request'].cohortID.className)

但是肯定我做错了,而且很难掌握上面的序列化程序中发生的事情。

1 个答案:

答案 0 :(得分:1)

将您的 get_cohortName() 方法更改为

class SubjectCohortSerializer(serializers.ModelSerializer):
    cohortName = serializers.SerializerMethodField(read_only=True)

    class Meta:
        model = models.Subject
        fields = ('subjectName', 'teacherID', 'pk', 'cohortName')

    def get_cohortName(self, subject):
        return subject.cohortID.className



Similar searches
    从多个复选框获取值作为字符串 如何强制SWT浏览器使用其他浏览器版本 根据Typescript的目标导入库 Samsung RB1844SW Refrigerator User Manual PureConfig:我无法在sbt插件中读取reference.conf