2015-04-19 9 views
9

instantiating पारित किया गया था के रूप में मैं निम्नलिखित मॉडल है:Django-आराम-ढांचा: कॉल नहीं कर सकता `.is_valid()` कोई `डेटा =` कीवर्ड तर्क जब serializer उदाहरण

class NoteCategory(models.Model): 
    title = models.CharField(max_length=100, unique=True) 

    def __unicode__(self): 
     return '{}'.format(self.title) 

class PatientNote(models.Model): 
    category = models.ForeignKey(NoteCategory) 
    patient = models.ForeignKey(Patient) 
    description = models.CharField(max_length=500) 
    created_at = models.DateTimeField(auto_now_add=True) 

    def __unicode__(self): 
     return '{}'.format(self.description) 

और निम्नलिखित serializer :

class PatientNoteSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = PatientNote 

मैं बस रोगी नोट पर एक पोस्ट करना चाहता हूं। प्राप्त काम करता है और भी अन्य मॉडलों पर पोस्ट ठीक से काम करता है:

class PatientNoteViewSet(APIView): 
    queryset = PatientNote.objects.all() 


    def post(self, request, format=None): 
     if not request.auth: 
      return Response({}) 
     token = Token.objects.filter(key=request.auth)[0] 
     user = token.user 

     serializer = PatientNoteSerializer(request.data) 
     if serializer.is_valid(): 
      serializer.save() 
      return Response(serializer.data, status=status.HTTP_201_CREATED) 
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

request.data, एक QueryDict, यानी है

<QueryDict: {u'category': [u'1'], u'patient': [u'1'], u'description': [u'da rest']}> 

यह दो FKS, रोगी और श्रेणी को भरने के लिए सक्षम हो जाएगा , उनके आईडी और विवरण के माध्यम से एक साधारण पाठ है।

पोस्ट अनुरोध एक निम्नलिखित (कि अन्य मॉडलों के साथ काम करता है) है: enter image description here

वैसे भी, पोस्ट प्रतिक्रिया है 500 निम्न त्रुटि के साथ:

AssertionError at /api/notes/ 

के रूप में कोई data=.is_valid() कॉल नहीं कर सकता serializer उदाहरण को तत्काल करते समय कीवर्ड तर्क पारित किया गया था।

त्रुटि अगर मैं पाइथन खोल में इसका उपयोग करने का प्रयास करता हूं तो त्रुटि वही होती है।

उत्तर

19

जब आप ऑब्जेक्ट्स को क्रमबद्ध करना चाहते हैं, तो आप ऑब्जेक्ट को पहले तर्क के रूप में पास करते हैं।

serializer = CommentSerializer(comment) 
serializer.data 
# {'email': u'[email protected]', 'content': u'foo bar', 'created': datetime.datetime(2012, 8, 22, 16, 20, 9, 822774)} 

लेकिन जब आप deserialize करना चाहते हैं यदि आप एक data kwarg साथ डेटा गुजरती हैं।

serializer = CommentSerializer(data=data) 
serializer.is_valid() 
# True 
serializer.validated_data 
# {'content': 'foo bar', 'email': '[email protected]', 'created': datetime.datetime(2012, 08, 22, 16, 20, 09, 822243)} 

तो आपके मामले में आप अपनी पोस्ट डेटा deserialize करना चाहते हैं, तो इसके आपको क्या करना है:

serializer = PatientNoteSerializer(data=request.data) 
+0

क्या लिखने में कोई त्रुटि! आपका बहुत बहुत धन्यवाद! – ennioma

संबंधित मुद्दे