Django Rest框架不从条件返回响应代码

2024-10-02 12:30:15 发布

您现在位置:Python中文网/ 问答频道 /正文

如果不允许删除对象,我尝试从DRF返回405响应,但是我不断得到204\u NO\u内容的响应。即使实例没有被删除并且if语句正常工作,返回的响应也不正确。我做错什么了

这是我的密码:

def perform_destroy(self, instance):
    if not instance.deletable:
        return Response({'error_message': 'Cannot delete last journal entry line.'}, status=status.HTTP_405_METHOD_NOT_ALLOWED)
    sje_id = instance.journal_entry.id
    instance.delete()
    sje = PurchaseJournalEntry.objects.get(pk=sje_id)
    sje.regenerate_mutations()
    sje.save()

Tags: 对象实例instancenoid密码内容if
2条回答

^{} [drf-doc]不应该返回HTTP响应。它应该只是删除对象,而不是返回响应。如果您返回一个响应,它将被忽略

但是,您可以重写^{} [drf-doc]函数,例如:

def destroy(self, request, *args, **kwargs):
    instance = self.get_object()
    if not instance.deletable:
        return Response({'error_message': 'Cannot delete last journal entry line.'}, status=status.HTTP_405_METHOD_NOT_ALLOWED)
    self.perform_destroy(instance)
    return Response(status=status.HTTP_204_NO_CONTENT)

perform_destroy不应返回任何内容

如果要更改此值,应重写视图的destroy或引发适当的异常:

from rest_framework.exceptions import MethodNotAllowed

def perform_destroy(self, instance):
    if not instance.deletable:
        raise MethodNotAllowed(default_detail='Cannot delete last journal entry line.')
    sje_id = instance.journal_entry.id
    instance.delete()
    sje = PurchaseJournalEntry.objects.get(pk=sje_id)
    sje.regenerate_mutations()
    sje.save()

相关问题 更多 >

    热门问题