无法使用Django REST Framework发布数据

时间:2017-05-24 12:20:03

标签: python django django-models django-rest-framework

我正在接受这个error,虽然我在文本和标题字段中给出了正确的字符串。我不知道原因是什么,但是我能够发布其余三个字段的值(作者) ,CREATED_DATE,出版日期)。

Serializer.py

from rest_framework import serializers
from blog.models import Post
from django.utils import timezone
from rest_framework.validators import UniqueValidator

class blogSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = ('author','title', 'text','created_date','published_date')

model.py

from django.db import models
from django.utils import timezone

class Post(models.Model):
   author = models.ForeignKey('auth.User',null=True)
   title = models.CharField(max_length=200)
   text = models.CharField(max_length=200)
   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

views.py

from blog.models import Post
from .serializers import UserSerializer, GroupSerializer,blogSerializer
from rest_framework import viewsets,status
from rest_framework.decorators import api_view

class blogViewSet(viewsets.ModelViewSet):
    queryset = Post.objects.all()
    serializer_class = blogSerializer

我在这里发布数据。

    @api_view(['GET', 'POST'])
    def blog_list(request):
       if request.method=='GET':
           my_blog=Post.objects.all()
           serializers=blogSerializer(my_blog,Many=True)
           return JsoResponse(serializers.data,safe=False)

       elif request.method=='POST':
           data=JSONParser().parse(request)
           serializers=blogSerializer(data=data)
           if serializers.is_valid():
              serializer.save()
              return JsonResponse(serializers.data,status=201)
           return JsonResponse(serializers.errors,status=400)

1 个答案:

答案 0 :(得分:0)

我会设置一个单元测试来测试这个功能。看起来您的任何帖子数据都没有进入序列化程序,否则一旦您提交表单就会重新填充有效字段,并且返回错误。标题和文本字段也是唯一需要/没有默认值的字段。

如果您在访问request.data的视图上使用某种形式的装饰器(或类似的东西),这可能是造成问题的原因。由于休息框架在填充request.POST

时会修改request.data