0

Я строю RESTful API с Джанго, django-rest-restframwork, django-rest-framework-mongoengine, MongoDB, mongoengine .Everything идет правильно, но создать или обновить document.When проверки документа с использованием serializer.is_valid(), сериализатору всегда возвращают false.here мои коды ниже:почему Джанго-Rest-рамочные-mongoengine-сериализаторов is_valid() всегда возвращает ложь

models.py

from mongoengine import * 

class BusinessExternalLinks(EmbeddedDocument): 
    name = StringField() 
    url = StringField() 
class BusinessCardInfo(DynamicDocument): 
    QcardUrl = StringField() 
    businessCardPic = StringField() 
    businessCardPicSet = ListField(StringField()) 
    className = StringField() 
    createDate = StringField() 
    # externalLinkList = ListField(StringField()) 
    externalLinkList = ListField(EmbeddedDocumentField(BusinessExternalLinks)) 
    merchantCode = StringField() 
    merchantHeadPic = StringField() 
    merchantNickName = StringField() 
    occupation = StringField() 
    praiseNumber = IntField() 
    professionalExperience = StringField() 
    selfSummary = StringField() 
    serviceSurpose = StringField() 
    telephone = StringField() 
    videoUrl = StringField() 
    viewNumber = IntField() 
    wechatId = StringField() 
    meta = {'collection':'BusinessCardInfo'} 

serializers.py

from rest_framework_mongoengine.serializers import DynamicDocumentSerializer, DocumentSerializer, EmbeddedDocumentSerializer 
from .models import BusinessCardInfo, BusinessExternalLinks 

class ExternalLinkListSerializer(EmbeddedDocumentSerializer): 
    class Meta: 
     model = BusinessExternalLinks 

class BusinessCardInfoSerializer(DocumentSerializer): 
    externalLinkList = ExternalLinkListSerializer(many=True) 
    class Meta: 
     model = BusinessCardInfo 

    def update(self, instance, validated_data): 
     externalLinkList = validated_data.pop('externalLinkList') 
     updated_instance = super(BusinessCardInfoSerializer, self).update(instance, validated_data) 

     for externallink in externalLinkList: 
      updated_instance.externalLinkList.append(BusinessExternalLinks(**externallink)) 

     # instance._id = validated_data.get('id', instance.id) 
     # instance.merchantNickName = validated_data.get('merchantNickName', instance.merchantNickName) 
     updated_instance.save(self) 
     return updated_instance 

views.py

from rest_framework.views import APIView 
from rest_framework.response import Response 
from rest_framework import status 
from rest_framework import parsers 
from rest_framework import renderers 
from rest_framework_mongoengine.serializers import DocumentSerializer 
from .models import BusinessCardInfo 
from .serializers import BusinessCardInfoSerializer 
from rest_framework_mongoengine.generics import ListCreateAPIView, RetrieveUpdateDestroyAPIView 
from bson import json_util, ObjectId 
import json 
from mongoengine import * 
class BusinessSingleCardView(APIView): 
    """ 
    retrieve single card 
    """ 
    throttle_classes =() 
    permission_classes =() 
    parser_classes = (parsers.FormParser, parsers.JSONParser,) 
    renderer_classes = (renderers.JSONRenderer,) 

    def get(self, request): 
     businesssinglecard = BusinessCardInfo.objects(**{ 'merchantCode' : request.GET.get('tkid') }) 
     # businesssinglecard = BusinessCardInfo.objects.get(**{ 'merchantCode' : request.GET.get('tkid') }) 
     # businesssinglecard = BusinessCardInfo.objects.get(merchantCode=request.GET.get('oid')) 
     serializer = BusinessCardInfoSerializer(businesssinglecard,many=True) 
     return Response(serializer.data, status=status.HTTP_200_OK) 

    def post(self, request): 
     # data = parsers.JSONParser().parse(request) 
     businesscardinfo = BusinessCardInfo.objects(**{ 'merchantCode' : request.GET.get('tkid') }) 
     serializer = BusinessCardInfoSerializer(businesscardinfo, data=request.data) 
     serializer.is_valid() 
     # serializer.update(BusinessCardInfo ,serializer.validated_data) 
     return Response(serializer.is_valid(), status=status.HTTP_200_OK) 

Любые идеи?

+0

Что проверки ошибок вы получаете? –

+1

Что такое 'serializer.errors' после запуска' serializer.is_valid() '? –

ответ

2

Проверьте Джанго версию она должна быть терка затем 1.6 установить последнюю версию, в старом rest_framework он использует в своем методе поста data=request.DATA Так вот путь его подачи утоляет FALSE

def post(self, request) 
    serializer = MySerializers(data=request.data) 
Смежные вопросы