Я создаю представление restpi, которое должно быть единственной конечной точкой для всех 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)