在嵌套序列化程序中使用mongoengine为Django-Rest-Framework定义正确的.create()方法,可以按照以下步骤进行操作:
下面是一个示例代码:
# models.py
from mongoengine import Document, StringField, IntField
class NestedDocument(Document):
name = StringField()
age = IntField()
class MainDocument(Document):
nested = EmbeddedDocumentField(NestedDocument)
# serializers.py
from rest_framework import serializers
from .models import NestedDocument, MainDocument
class NestedDocumentSerializer(serializers.EmbeddedDocumentSerializer):
class Meta:
model = NestedDocument
fields = ('name', 'age')
class MainDocumentSerializer(serializers.DocumentSerializer):
nested = NestedDocumentSerializer()
def create(self, validated_data):
nested_data = validated_data.pop('nested')
nested = NestedDocument(**nested_data)
main_doc = MainDocument.objects.create(nested=nested, **validated_data)
return main_doc
class Meta:
model = MainDocument
fields = ('nested',)
# views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from .serializers import MainDocumentSerializer
class MainDocumentView(APIView):
def post(self, request):
serializer = MainDocumentSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=400)
在上述示例中,我们创建了两个mongoengine模型:NestedDocument和MainDocument。NestedDocument是嵌套文档,MainDocument是主文档,其中包含一个嵌套字段nested。
在序列化器中,我们定义了两个序列化器:NestedDocumentSerializer和MainDocumentSerializer。NestedDocumentSerializer用于嵌套文档的序列化和反序列化,MainDocumentSerializer用于主文档的序列化和反序列化。在MainDocumentSerializer中,我们重写了create()方法来处理嵌套文档的创建。
在视图中,我们使用MainDocumentView来处理POST请求,并使用MainDocumentSerializer进行数据的序列化和反序列化。
这样,当发送POST请求时,可以将嵌套的文档数据传递给API视图,视图将使用序列化器来处理数据,并创建相应的文档。
领取专属 10元无门槛券
手把手带您无忧上云