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) 
  • Python - нажатие кнопки javascript
  • Запросить флажок в файле request.form
  • "SyntaxError: non-keyword arg after keyword arg" Ошибка в Python при использовании запросов.post ()
  • Python отправляет данные с использованием механизации
  • Сделайте запрос http POST для загрузки файла с помощью python urllib / urllib2
  • POST не получает правильный ответ
  • Прокси-сервер Python не обрабатывает запросы POST
  • Запрос POST, дающий пустые результаты
  • Python - лучший язык программирования в мире.