Я пытаюсь выполнить запрос POST для создания статьи, и я получаю эту ошибку Request failed with status code 400 Bad Request: /api/articles/create/
.
Для статьи необходимо создать 3 атрибута:
(1) название
(2) тело
(3) автор (текущий пользователь)
Маршрутизатор работаетхорошо, поскольку запрос POST входит в метод post
класса ArticleCreateView
.Но я предполагаю, что serializer.is_valid()
возвращает False
по какой-то причине.Также print(request.data)
возвращает {'title': 'hello', 'body': 'stuff'}
Еще одна загадка в Django: откуда сериализатор узнает, хочу ли я получить, создать или обновить что-то?Во всех примерах, которые я видел, сериализатор волшебным образом это знает.
class ArticleCreateView(CreateAPIView):
permission_classes = [IsAuthenticated]
def post(self, request):
serializer = ArticleSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors)
class ArticleSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = '__all__'
def create(self, validated_data):
author = self.context['request'].user
title = validated_data.get('title')
body = validated_data.get('body')
return Article.objects.create(author=author, title=title, body=body)
class Article(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
body = models.TextField(max_length=100)
date_updated = models.DateTimeField(auto_now=True)
date_created = models.DateTimeField(auto_now_add=True)