DRF:自定义PrimaryRelatedField

时间:2019-07-15 03:34:16

标签: django django-rest-framework

DRF默认情况下使用PrimaryKeyRelatedField渲染外键,并以单个pk表示。

class Foo(models.Model):
   bar = models.ForeignKey('Bar')

def FooSerializer(serializers.ModelSerializer):

  class Meta:
    model = Foo
    fields = [
      'id',
      'bar'
    ]

FooSerializer(foo_instance).data看起来像

{ 
  'id': 3,
  'bar': 5,
}

我希望它成为

{ 
  'id': 3,
  'bar': {
    'id': 5
  },
}

不仅针对Foo / Bar,而且针对整个项目

1 个答案:

答案 0 :(得分:0)

可能您可以这样:

首先,改写PrimaryKeyRelatedField

class DictPrimaryKeyRelatedField(PrimaryKeyRelatedField):

    def to_representation(self, value):
        pk = super(DictPrimaryKeyRelatedField, self).to_representation(value)
        return dict(id=pk)

然后创建一个ModelSerializer,并覆盖serializer_related_field

class CustomModelSerializer(serializers.ModelSerializer):
    serializer_related_field = DictPrimaryKeyRelatedField

然后在所有序列化程序中使用CustomModelSerializer而不是ModelSerializer