我有一个如下所示的序列化程序类:
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的最佳方法是什么?
答案 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
希望这有帮助。