没有从 Serializer 获取数据

not getting the data from Serializer

view.py

@csrf_exempt

def blog_list(请求):

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 传递给序列化程序。传递整个请求不会 return 任何东西,因为请求没有您在序列化程序中声明的字段。它们在 post 数据中。

首先你需要了解这段代码的一些事情

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里面的所有数据(method, body, data, headers,等),而不仅仅是请求数据。所以,你想解析 request.body,而不是 request.

data = JSONParser().parse(request.body)