如果不允许删除该对象,我试图从DRF返回405响应,但我一直收到响应204_NO_CONTENT。即使没有删除该实例并且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()
答案 0 :(得分:1)
perform_destroy
[drf-doc]不应返回HTTP响应。它只是应该删除对象,而不返回响应。如果返回响应,则将其忽略。
不过,您可以覆盖destroy
[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)
答案 1 :(得分:1)
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()