社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

如何在django rest框架中更新和删除数据

Muhammad Hussnain • 6 年前 • 2030 次点击  

我在drf中执行crud,2个操作(get,post)运行良好,但在put和delete操作中出错。put()缺少1个必需的位置参数:“id”,删除时出现相同错误。delete()缺少1个必需的位置参数:“id”,当我试图通过在url中传递id来获取数据时,出现以下错误“get()获得意外的关键字参数“id”

我更改了url模式,但得到了相同的错误

VIEW

from django.shortcuts import render
from django.http import HttpResponse
from django.shortcuts import get_object_or_404
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Employee
from .serializer import EmployeeSerializer

class employeeList(APIView):

    def get(self, request):
        employee1 = Employee.objects.all()
        serializer1 = EmployeeSerializer(employee1 , many = True)
        return Response(serializer1.data)

    def post(self, request):
        employee1 = request.data.get("")
        serializer1 = EmployeeSerializer(data=request.data, 
partial=True)
        if serializer1.is_valid(raise_exception=True):
            employee_saved = serializer1.save()
        return Response({"success": "Employee '{}' created 
successfully".format(employee_saved.first_name)})
    def put(self , request, id):
        employee = get_object_or_404(Employee, id=id)
        data = request.data.get("")
        serializer1 = EmployeeSerializer(instance = employee , 
data=data, partial=True)
        if serializer1.is_valid(raise_exception=True):
            saved_employee = serializer1.save()
        return Response({"success":"Employee '{}' updated 
successfully".format(saved_employee.first_name)})
    def delete(self, request, id):
        employee = get_object_or_404(Employee, id=id)
        employee.delete()
        return Response({"message":"Employee '{}' deleted 
successfully".format(employee.first_name)}, status=204)

序列化程序.py

from rest_framework import serializers
from .models import Employee

class EmployeeSerializer(serializers.ModelSerializer):

    class Meta:
        model = Employee
        fields = '__all__'
    def create(self, validated_data):
        return Employee.objects.create(**validated_data)
    def update(self, instance, validated_data):

instance.first_name=validated_data.get('first_name',instance.first_name)
        instance.last_name = 
validated_data.get('last_name',instance.last_name)
        instance.employee_id = 
validated_data.get('employee_id',instance.employee_id)
        instance.save()
        return instance

URLS.Py

from django.conf.urls import url
from django.contrib import admin
from webapp import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^employee/', views.employeeList.as_view()),
    url(r'^employees/(?P<id>[0-9]+)$', views.employeeList.as_view())
]

我希望看到成功消息,但我得到了错误消息

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40911
文章 [ 1 ]  |  最新文章 6 年前
HuLu ViCa
Reply   •   1 楼
HuLu ViCa    7 年前

必须指明每个url模式要管理的方法:

from django.conf.urls import url
from django.contrib import admin
from webapp import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^employee/', views.employeeList.as_view({'get': 'list', 'post': 'create'})),
    url(r'^employees/(?P<id>[0-9]+)$', views.employeeList.as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destroy'}))
]

'get': 'list' 指示方法get将由类方法管理 list() 的观点。