Django rest framework 序列化问题

我的模型类

class Type(models.Model):
    def __unicode__(self):
        return self.name

    name = models.CharField(max_length=20, blank=True, default=u'', verbose_name=u'类别')


class Subject(models.Model):
    def __unicode__(self):
        return self.name

    name = models.CharField(max_length=20, blank=True, default=u'', verbose_name=u'名称')


class Student(models.Model):
    def __unicode__(self):
        return self.name

    name = models.CharField(max_length=20, blank=True, default=u'', verbose_name=u'姓名')
    subject = models.ForeignKey(to=Subject, on_delete=models.CASCADE)
    type_id = models.IntegerField(default=0, blank=True, verbose_name=u'类别')

我的serializer

class SubjectSerializer(serializers.ModelSerializer):
    class Meta:
        model = Subject
        fields = '__all__'

class TypeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Type
        fields = '__all__'


class StudentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Student
        fields = '__all__'
        depth = 1

    type = serializers.SerializerMethodField(read_only=True)

    @staticmethod
    def get_type(obj):
        queryset = Type.objects.filter(id=obj.type_id).first()
        if queryset:
            return TypeSerializer(instance=queryset).data
        return {}

在意义上type和subject都属于student的外键,只不过subject我先是定义在了model里,type我预留了一个id,在student序列化时,对于定义了外键的subject,可以很轻松的设置depth=1使之序列化到student中,但是对于type,有没有其他更简单的方法进行序列化,(目前我使用的SerializerMethodField进行自定义的),例如 PrimaryKeyRelatedField (不会用) 或其他方法让我直接指定一个主键就能运行的?

评论 0