如何传递多个JSON对象而不会收到400 Bad Request错误

时间:2016-03-31 04:21:34

标签: jquery json django

我正在尝试使用Ajax发布到Django并将JSON信息保存在数据库中。 当我只有一个对象进行字符串化和发送时,这种方法有效,但是当我添加另一个对象时,我收到400 Bad请求错误。我相信这可能是由于我的模型/视图设置方式?

这是我的代码: JSON

var testData2 = '[{"id" : "Home", "parent" : "#", "text" : "Home"}, {"id" : "node3", "parent" : "#", "text" : "test worked yay"}, {"id" : "node2", "parent" : "Home", "text" : "hmm. weird"}]';

链接到"保存更改"按钮

$("#postChange").click(function(){
    $.ajax({
      url:/snippets/,
      type:"POST",
      data:testData2,
      contentType:"application/json; charset=utf-8",
      dataType:"json",

    })
});

Django模型

from django.db import models

class StoringJSON(models.Model):
  id = models.TextField(primary_key='true', default='node_1')
  parent = models.CharField(max_length=30, default='#')
  text = models.CharField(max_length=30, default='Node')

Django View

@api_view(['GET', 'POST'])
def tree_list(request):
    """
    List all snippets, or create a new tree.
    """
    if request.method == 'GET':
        trees = StoringJSON.objects.all()
        serializer = TreeSerializer(trees, many=True)
        return Response(serializer.data)

    elif request.method == 'POST':
        serializer = TreeSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

串行:

from rest_framework import serializers
from treetool.models import StoringJSON

class TreeSerializer(serializers.ModelSerializer):
    class Meta:
        model = StoringJSON
        fields = ('id', 'parent', 'text')

对于更多上下文,我使用jsTree jQuery插件。

感谢您的帮助,如果您需要更多信息来帮助我,请告诉我,我会及时回复。

1 个答案:

答案 0 :(得分:0)

如果您要序列化多个,则可能需要再次将many=True传递给TreeSerializer(在POST支票内)。

另外,我很惊讶传递primary_key='true'的工作原理,应该写成primary_key=True