Не удается получить данные из сериализатора
view.py
@csrf_exempt
def blog_list(request):
if request.method == 'GET':
post = Post.objects.all()
serializer = BlogSerializer(post, many=True)
return JsonResponse(serializer.data,safe=False)
elif request.method == 'POST':
data = JSONParser().parse(request)
serializer = BlogSerializer(data=data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data, status=201)
return JsonResponse(serializer.errors, status=400)
class BlogSerializer(serializers.Serializer):
class Meta:
model = Post
fields = ['author', 'title', 'text', 'published_date']
class Post(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(blank=True, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
Вы должны передать request.data в сериализатор. Передача всего запроса ничего не вернет, потому что запрос не имеет полей, которые вы объявили в сериализаторе. Они находятся в post data.
Сначала нужно понять несколько вещей об этом коде
def blog_list(request):
if request.method == 'GET':
post = Post.objects.all()
serializer = BlogSerializer(post, many=True)
return JsonResponse(serializer.data,safe=False)
elif request.method == 'POST':
data = JSONParser().parse(request)
serializer = BlogSerializer(data=data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data, status=201)
return JsonResponse(serializer.errors, status=400)
Здесь request ссылается на объект request, который содержит все данные внутри запроса (метод, тело, данные, заголовки и т.д.), а не только данные запроса. Итак, вы хотите разобрать request.body, вместо request.
data = JSONParser().parse(request.body)