Python Django REST框架:数据未过帐到数据库
所以我已经把头撞在墙上好几个小时了,我认为我理解django rest框架,但我显然不理解。当我尝试通过todo create api添加条目时,它会给我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
{'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')