modelos:
class Region(models.Model):
name = models.CharField(max_length=255)
code = models.IntegerField()
class District(models.Model):
region = models.ForeignKey('Region', related_name='districts', on_delete=models.PROTECT)
name = models.CharField(max_length=255)
code = models.IntegerField()
Visualizações:
class RegionDelete(generics.DestroyAPIView):
queryset = Region.objects.all()
serializer_class = RegionSerializer
Código HTTP 423 ou outro.
Detalhe do erro.
Exceção Django
mixins:
class DestroyModelMixin(object):
"""
Destroy a model instance.
"""
def destroy(self, request, *args, **kwargs):
instance = self.get_object()
try:
self.perform_destroy(instance)
except django.db.models.deletion.ProtectedError as e:
return Response(status=status.HTTP_423_LOCKED, data={'detail':str(e)})
return Response(status=status.HTTP_204_NO_CONTENT)
def perform_destroy(self, instance):
instance.delete()
Você precisará escrever um método personalizado para lidar com este caso. Não acho que seja comum o suficiente para garantir o acréscimo de complexidade extra ao case padrão.
Isso pode ser corrigido com apenas algumas linhas de código. Supõe-se que os frameworks tornem a vida mais fácil, então acho que o tratamento automático de exceções para a exclusão do modelo deve ser adicionado.
Problema antigo, mas ainda assim tão relevante.
Do meu ponto de vista é muito comum e serve como parte crucial para manter a integridade do seu banco de dados.
Correndo para isso também. Seria muito bom ter isso tratado por padrão sem um erro 500.
Comentários muito úteis
Isso pode ser corrigido com apenas algumas linhas de código. Supõe-se que os frameworks tornem a vida mais fácil, então acho que o tratamento automático de exceções para a exclusão do modelo deve ser adicionado.