Индивидуальное сообщение об ответе на функцию perform_destroy()
Я написал пользовательский метод perform_destroy()-метод для выполнения некоторых дополнительных проверок.
def perform_destroy(self,instance):
force = self.request.data.get('force',None)
resp = {}
if Processingstepstatus.objects.filter(orderfile__order=instance).exists() and not force:
raise serializers.ValidationError({"message": "Order already in production and can't be canceled cost-free. Perform Delete Request with parameter \"force:True\" to cancel and assume the costs of "+ str(instance.currentcosts)+"€" })
else:
if Processingstepstatus.objects.filter(orderfile__order=instance).exists() and force:
resp['invoice'] = "Placeholdervalue"
instance.canceled = True
instance.save()
resp['message'] = "Successfully canceled your order."
return Response(resp,status=status.HTTP_200_OK)
Это должно вернуть json-ответ с сообщением и информацией о счете, но он не дает никакого ответа, кроме 204 - нет содержимого.
Я думаю, что здесь он перезаписывается методом более высокого уровня destroy(), верно? Как с этим справиться?
наилучшие пожелания
Возвращаемые значения из всех методов perform_<method>
игнорируются, если вы хотите вернуть пользовательский ответ, вам следует переопределить метод destroy
def destroy(self, request, *args, **kwargs):
instance = self.get_object()
force = request.data.get('force',None)
resp = {}
if Processingstepstatus.objects.filter(orderfile__order=instance).exists() and not force:
raise serializers.ValidationError({"message": "Order already in production and can't be canceled cost-free. Perform Delete Request with parameter \"force:True\" to cancel and assume the costs of "+ str(instance.currentcosts)+"€" })
else:
if Processingstepstatus.objects.filter(orderfile__order=instance).exists() and force:
resp['invoice'] = "Placeholdervalue"
instance.canceled = True
instance.save()
resp['message'] = "Successfully canceled your order."
return Response(resp,status=status.HTTP_200_OK)