首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Non_field_errors没有在django webapi提供任何数据

Non_field_errors没有在django webapi提供任何数据
EN

Stack Overflow用户
提问于 2019-06-25 03:03:41
回答 2查看 2.7K关注 0票数 2

我是Django和python的新手。现在,我正在尝试使用Django和python来实现web。我可以得到get请求,但是当我请求post方法时,会显示这个错误

"non_field_errors":“没有提供数据”

View.py=>

代码语言:javascript
复制
from rest_framework.generics import get_object_or_404
from rest_framework.views import APIView
from rest_framework.response import Response

from .models import Allowance

from .serializers import AllowanceSerializer

# Create your views here.




class AllowanceAPIView(APIView):
    def get(self,request,pk=None):
        if pk:
            allowance=get_object_or_404(Allowance.objects.all(),pk=pk)
            serializer = AllowanceSerializer(allowance)
            return Response({serializer.data})
        allowance=Allowance.objects.all()
        serializer = AllowanceSerializer(allowance,many=True)
        return Response({"allowance":serializer.data})

    def post(self,request):
        allowance = request.data.get('allowance')

        serializer = AllowanceSerializer(data=allowance)
        if serializer.is_valid(raise_exception=True):
            allowance_saved=serializer.save()

        return Response({"success":"Allowance '{}' created successfully".format(allowance_saved.AllowID)})

    def put(self,request,pk):
        save_allowance = get_object_or_404(Allowance.objects.all(),pk=pk)
        data = request.data.get('allowance')
        serializer = AllowanceSerializer(instance=save_allowance,data=data,partial=True)

        if serializer.is_valid(raise_exception = True):
            allowance_saved=serializer.save()

        return Response({"sucess": "Allowance '{}' updated successfully".format(allowance_saved.AllowID)})

    def delete(self,request,pk):
        #Get object with this pk
        allowance = get_object_or_404(Allowance.objects.all(),pk=pk)
        allowance.delete()
        return Response({"message":"Allowance with id '{}' has been deleted.".format(pk)},status=204)

urls.py内部应用程序=>

代码语言:javascript
复制
from django.conf.urls import url


from .views import AllowanceAPIView

urlpatterns = [
    url(r'^$', AllowanceAPIView.as_view(), name='post-listcreate'),
    url(r'^(?P<pk>\d+)/$', AllowanceAPIView.as_view(), name='post-listcreate')
]  

urls.py内部项目=>

代码语言:javascript
复制
from django.conf.urls import url, include
from django.contrib import admin
from rest_framework_jwt.views import obtain_jwt_token

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    # url(r'^api/auth/login/$', obtain_jwt_token, name='api-login'),
    url(r'^api/allowances_mas/', include('tmswebapi.urls')),
]

样本API request=>

代码语言:javascript
复制
{

            "AllowID": "Allow1",
            "AllowDesc": "Allow1 Description",
            "AllowAmt": "11.00",
            "AllowType": "MEAL",
            "Created_DT": "2019-06-18T18:09:00Z",
            "Created_Usr": "Admin",
            "LastModified_Usr": "",
            "LastModified_DT": "2019-06-18T18:09:00Z"
        }

串行器=>

代码语言:javascript
复制
from rest_framework import serializers
import datetime

from .models import Allowance

class AllowanceSerializer(serializers.ModelSerializer):
    class Meta:
        model=Allowance
        fields = "__all__"

        def create(self,validated_data):
            return Allowance.objects.create(**validated_data)

        def update(self,instance,calidated_data):            
            instance.AllowDesc = validated_data.get('AllowDesc',instance.AllowDesc)
            instance.AllowAmt = validated_data.get('AllowAmt',instance.AllowAmt)
            instance.AllowType = validated_data.get('AllowType',instance.AllowType)
            instance.LastModified_Usr = "Admin"
            instance.LastModified_DT = datetime.datetime.now()

            instance.save()
            return instance

是因为urls还是因为数据格式?

EN

回答 2

Stack Overflow用户

发布于 2019-06-25 03:14:29

这是来自if serializer.is_valid(raise_exception = True):行的返回错误。

这意味着data在某个地方是None

调试代码以确保data变量具有数据

票数 2
EN

Stack Overflow用户

发布于 2020-11-26 15:12:26

代码语言:javascript
复制
def post(self,request):
        allowance = request.data

        serializer = AllowanceSerializer(data=allowance)
        if serializer.is_valid(raise_exception=True):
            allowance_saved=serializer.save()

        return Response({"success":"Allowance '{}' created successfully".format(allowance_saved.AllowID)})

现在试试这个

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56746292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档