Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django REST框架:数据未过帐到数据库_Python_Django_Django Rest Framework - Fatal编程技术网

Python Django REST框架:数据未过帐到数据库

Python Django REST框架:数据未过帐到数据库,python,django,django-rest-framework,Python,Django,Django Rest Framework,所以我已经把头撞在墙上好几个小时了,我认为我理解django rest框架,但我显然不理解。当我尝试通过todo create api添加条目时,它会给我{'list\u item':None,'complete':False} 当我在没有.data的情况下打印序列化程序时,它会识别列表_项中输入了一些内容,但不会发送到数据库: TodoSerializer(data=<QueryDict: {'_content_type': ['application/json'], '_content

所以我已经把头撞在墙上好几个小时了,我认为我理解django rest框架,但我显然不理解。当我尝试通过todo create api添加条目时,它会给我
{'list\u item':None,'complete':False}

当我在没有.data的情况下打印序列化程序时,它会识别列表_项中输入了一些内容,但不会发送到数据库:

TodoSerializer(data=<QueryDict: {'_content_type': ['application/json'], '_content': ['    {\r\n        "list_item": "test item",\
r\n        "complete": false\r\n    }']}>):
    list_item = CharField(allow_null=True, max_length=100, required=False)
    complete = BooleanField(required=False)
View.py

from rest_framework.decorators import api_view
from rest_framework.response import Response
from .serializers import TodoSerializer

@api_view(['GET'])
def apiOverview(request):
    api_urls = {
        'List': '/todo-list/',
        'Detail View': '/todo-detail/<str:pk>/',
        'Create': '/todo-create/<str:pk>/',
        'Update': '/todo-update/<str:pk>/',
        'Delete': '/todo-delete/<str:pk>/',
    }

    return Response(api_urls)

@api_view(['GET'])
def todoList(request):
    todo = Todo_list.objects.all()
    serializer = TodoSerializer(todo, many=True)
    return Response(serializer.data)
@api_view(['GET'])
def todoDetail(request, pk):
    todo = Todo_list.objects.get(id=pk)
    serializer = TodoSerializer(todo, many=False)
    return Response(serializer.data)

@api_view(['POST'])
def todoCreate(request):
    serializer = TodoSerializer(data=request.data)
    if serializer.is_valid():
        serializer.save()
    else:
        print("issue with data")
    print(serializer.errors)
    print(serializer.data)
    return Response(serializer.data)


@api_view(['POST'])
def todoUpdate(request, pk):
    todo = Todo_list.objects.get(id=pk)
    serializer = TodoSerializer(instance=todo, data=request.data)
    if serializer.is_valid():
        serializer.save()

    return Response(serializer.data)
models.py

from django.db import models

# Create your models here.

class Todo_list(models.Model):
    list_item = models.CharField(max_length=100, null=True)
    complete = models.BooleanField(default=False)
    def __str__(self):
        return self.list_item
序列化程序.py

from rest_framework import serializers
from .models import Todo_list

class TodoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Todo_list
        fields = ('list_item', 'complete')
我知道这与身份验证有关,但我不知道具体是什么


如果解决方案显而易见,那么我道歉,我几天前开始学习这个框架,我只需要有人检查一下代码,看看愚蠢的人在哪里。

您的
todoCreate(request)
方法仅限于使用
@api\u视图(['POST'])发布请求
decorator,从终端的输出中,我们可以看到您正在尝试发出GET请求。您的终端说
方法不允许
,因为
get()
方法不允许。这次请使用POST方法再次尝试该url。

这样就解决了
方法不允许的问题
。但是列表项仍然被发送为空。我刚刚测试了代码,它似乎工作正常,我没有面临这个问题。您是否已检查该条目是否已正确记录到数据库中?
打印(serializer.errors)
说明了什么?您可以像
serializer.is\u valid(raise\u exception=True)
这样传递参数,以查看是否存在任何错误。
print(serializer.errors)
只是显示一个空的dict。因此,在阅读一些内容后,我相信这可能与此有关:有一个用于序列化程序字段的部分:请注意,如果没有显式默认值,将此参数设置为True将意味着序列化输出的默认值为null,但并不意味着输入反序列化的默认值。默认值为False”。我认为这是指能够通过api进行读/写操作?所以这仍然没有解决问题,所以我甚至不知道在哪里可以解决这个问题
from django.db import models

# Create your models here.

class Todo_list(models.Model):
    list_item = models.CharField(max_length=100, null=True)
    complete = models.BooleanField(default=False)
    def __str__(self):
        return self.list_item
from rest_framework import serializers
from .models import Todo_list

class TodoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Todo_list
        fields = ('list_item', 'complete')