django-rest-framework: Невозможно вызвать `.is_valid ()`, поскольку аргумент ключевого слова `data =` не был передан при создании экземпляра 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) 

И следующий сериализатор:

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

Я просто хочу сделать POST на PatientNote. GET работает, а также POST на других моделях работает правильно:

 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']}> 

Он мог бы заполнить два FK, пациента и категорию, через свои идентификаторы, а описание – простой текст.

Запрос POST следующий (работает с другими моделями): введите описание изображения здесь

В любом случае, ответ POST – 500 со следующей ошибкой:

 AssertionError at /api/notes/ 

Не .is_valid() вызвать .is_valid() поскольку аргумент data= keyword не передавался при создании экземпляра serializer.

Ошибка будет такой же, если я попытаюсь использовать ее в оболочке python.

One Solution collect form web for “django-rest-framework: Невозможно вызвать `.is_valid ()`, поскольку аргумент ключевого слова `data =` не был передан при создании экземпляра serializer”

Когда вы хотите сериализовать объекты, вы передаете объект в качестве первого аргумента.

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

Но когда вы хотите десериализовать, вы передаете данные с data kwarg.

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

Поэтому в вашем случае вы хотите десериализовать свои данные, поэтому вам нужно сделать:

 serializer = PatientNoteSerializer(data=request.data) 
  • Использование данных из Ajax в скрипте python
  • Попытка опубликовать данные о многочастной форме в python, не будет публиковать
  • Необходимо отправить нажатия клавиш на веб-страницу (игра html5)
  • Как извлечь тело сообщения HTTP в BaseHTTPRequestHandler.do_POST ()?
  • Http POST Curl в python
  • Запрос POST, дающий пустые результаты
  • Отправить запрос на отправку в Scrapy
  • Запрос POST через urllib / urllib2?
  • Python OAuth WooCommerce
  • Python - нажатие кнопки javascript
  • Github-api дает 404 при передаче json-данных с помощью python + urllib2
  • Python - лучший язык программирования в мире.