Не удается получить данные из сериализатора

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)
Вернуться на верх