Rest Framework序列化程序,支持多个深度

时间:2014-08-14 16:24:10

标签: python django django-rest-framework

我有一个如下所示的序列化程序类:

class ShipmentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Shipment
        depth = 1 

货件模型具有另一个型号Location的外键,称为receiver。目前我可以发布一个这样的嵌套对象:

curl -X POST -H "Content-Type: application/json" -d '{"receiver": {"name": "Bob", "phone": "555-555-5555"}' http://localhost:8000/api/shipments/

但我还需要能够做一个平坦的POST,指的是接收器的pk。类似于深度= 0:

curl -X POST -H "Content-Type: application/json" -d '{"receiver": 43}' http://localhost:8000/api/shipments/

支持这两种POST的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

有两个序列化程序。可以在运行时通过覆盖 get_serializer_class 来确定将要使用的序列化程序类。例如:

get_serializer_class(self): 
    receiver = self.request.QUERY_PARAMS.get('receiver', None)
    if receiver not None:
        try:
            int(receiver)
            return ... # serializer with depth 0
        except ValueError:
            return ... # depth 1 serializer

希望这有帮助。