【发布时间】:2014-04-06 15:38:27
【问题描述】:
我刚开始使用 Django 和 REST Framework,尝试发布实体时出现错误。错误是:{"non_field_errors": ["Invalid data"]}。这发生在 serializer.is_valid()
行这就是我的视图类的样子:
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser
from API.models import Payload
from API.serializers import PayloadSerializer
from API.services import PayloadService
class JSONResponse(HttpResponse):
"""
An HttpResponse that renders its content into JSON.
"""
def __init__(self, data, **kwargs):
content = JSONRenderer().render(data)
kwargs['content_type'] = 'application/json'
super(JSONResponse, self).__init__(content, **kwargs)
@csrf_exempt
def payload_list(request):
if request.method == 'POST':
model = Payload(code="754d", body="Hello World")
serializer = PayloadSerializer(data=model)
if serializer.is_valid():
serializer.save()
return JSONResponse(serializer.data, status=201)
return JSONResponse(serializer.errors, status=400)
这是我的 Payload 模型供参考:
from __future__ import unicode_literals
from sqlserver_ado.fields import BigAutoField
from django.db import models
class Payload(models.Model):
id = BigAutoField(db_column='Id', primary_key=True) # Field name made lowercase.
code = models.CharField(db_column='Code', max_length=10) # Field name made lowercase.
body = models.TextField(db_column='Body') # Field name made lowercase.
class Meta:
managed = False
db_table = 'Payload'
值得注意的是,如果我正确设置了我的视图,并且实际上将一个 Json Payload 对象作为请求的一部分传入,它就可以正常工作。
工作 JSON 负载:{"code": "NPMC", "body": "Hello World"}
工作视图代码:
if request.method == 'POST':
data = JSONParser().parse(request)
serializer = PayloadSerializer(data=data)
if serializer.is_valid():
serializer.save()
return JSONResponse(serializer.data, status=201)
return JSONResponse(serializer.errors, status=400)
回复:{"id": 25, "code": "NPMC", "body": "Hello World"}
【问题讨论】:
标签: python django django-models django-views django-rest-framework