Python 如何在Django Rest框架中接收我不知道的json字段';我不想储存?
我正在使用Django Rest框架为以下json构建一个api:Python 如何在Django Rest框架中接收我不知道的json字段';我不想储存?,python,django,serialization,django-rest-framework,Python,Django,Serialization,Django Rest Framework,我正在使用Django Rest框架为以下json构建一个api: { "x_id": 123, "message_type": "count", "aggregate": [{"id": 1, "count": 3}], } 聚合中的json对象可以是两种不同的类型,这取决于消息类型。因此,如果message\u type等于count聚合数组中的对
{
"x_id": 123,
"message_type": "count",
"aggregate": [{"id": 1, "count": 3}],
}
聚合中的json对象可以是两种不同的类型,这取决于消息类型
。因此,如果message\u type
等于count
聚合数组中的对象如上所示,如果message\u type
等于person
,则聚合数组中的对象完全不同
对于两种不同类型的聚合,我有两个单独的模型,我希望根据消息类型
将它们存储在这些表中。但是由于message\u type
不是任何模型的一部分,因此未对其进行验证,我无法在序列化程序create()
方法中使用它:
class ObservationSerializer(serializers.ModelSerializer):
class Meta:
model = Observation
fields = ['x_id']
def create(self, validated_data):
print("message_type" in validated_data) # => prints "False"
return Observation.objects.create(**validated_data)
是否有人知道如何将字段
消息类型设置为必需,以便我可以使用它来决定要在哪个表中存储聚合?您可能需要将消息类型
用作GET参数
class ASerializer(serializers.ModelSerializer):
class Meta:
model = A
fields = '__all__'
class BSerializer(serializers.ModelSerializer):
class Meta:
model = B
fields = '__all__'
视图应该是这样的
class MyView(APIView):
def post(self, request, *args, **kwargs):
message_type = request.GET.get('message_type', None)
if message_type is not None:
if message_type == 'count':
serializer = ASerializer(data=request.data)
if message_type == 'person':
serializer = BSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(status=HTTP_200_OK)
return Response(status=status.HTTP_400_BAD_REQUEST)
请求看起来像
POST /api/view-path/?message_type=count or /api/view-path/?message_type=person
{
# Post body fields...
}