【发布时间】:2019-10-24 20:50:41
【问题描述】:
我正在创建一个 restapi 视图,它应该是所有 crud 的一个和所有端点。但无论我做什么,它总是执行 post 方法。终端向我显示,例如,patch 方法已被执行,但它总是确实发布并因此创建了一个新对象,它也不会删除它向我显示正确状态代码的对象,但该对象仍然存在。
这是我的看法
class StatusGET_New(
generics.ListCreateAPIView,
mixins.RetrieveModelMixin,
mixins.CreateModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin
):
queryset = Status.objects.all()
serializer_class = StatusSerializers
permission_classes = []
def perform_destroy(self, instance):
if instance is not None:
return instance.delete()
return None
def get_queryset(self):
qs = Status.objects.all()
query = self.request.GET.get('q')
if query is not None:
qs = qs.filter(
content__icontains = query
)
return qs
def get_object(self):
request = self.request
passed_id = request.GET.get('pk',None)
queryset = self.get_queryset()
obj = None
if passed_id is not None:
obj = get_object_or_404(queryset,pk = passed_id)
self.check_object_permissions(request,obj)
return obj
def get(self,request,*args,**kwargs):
passed_id = self.request.GET.get('pk',None)
if passed_id is not None:
return self.retrieve(request,*args,**kwargs)
return super().get(request,*args,**kwargs)
def post(self,request,*args,**kwargs):
return self.create(request,*args,**kwargs)
def put(self,request,*args,**kwargs):
url_passed_id = request.GET.get("pk",None)
json_data = {}
body_ = request.body
if is_json(body_):
json_data = json.loads(request.body)
new_passed_id = json_data.get('pk',None)
passed_id = url_passed_id or new_passed_id or None
self.passed_id = passed_id
return self.update(request,*args,**kwargs)
def patch(self,request,*args,**kwargs):
url_passed_id = request.GET.get("pk",None)
json_data = {}
body_ = request.body
if is_json(body_):
json_data = json.loads(request.body)
new_passed_id = json_data.get('pk',None)
passed_id = url_passed_id or new_passed_id or None
self.passed_id = passed_id
return self.partial_update(body_,*args,**kwargs)
def delete(self,request,*args,**kwargs):
url_passed_id = request.GET.get("pk",None)
json_data = {}
body_ = request.body
if is_json(body_):
json_data = json.loads(request.body)
new_passed_id = json_data.get('pk',None)
passed_id = url_passed_id or new_passed_id or None
self.passed_id = passed_id
return self.destroy(request,*args,**kwargs)
【问题讨论】:
标签: django api django-rest-framework django-rest-viewsets