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()
puntos de vista:
class RegionDelete(generics.DestroyAPIView):
queryset = Region.objects.all()
serializer_class = RegionSerializer
Código HTTP 423 u otro.
Detalle del error.
Excepción de 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()
Deberá escribir un método personalizado para manejar este caso. No creo que sea lo suficientemente común como para justificar agregar la complejidad adicional al caso estándar.
Esto se puede solucionar con solo un par de líneas de código. Se supone que los marcos hacen la vida más fácil, por lo que creo que se debe agregar el manejo automático de excepciones para la eliminación del modelo.
Problema antiguo, pero aún así tan relevante.
Desde mi punto de vista, es muy común y sirve como una parte crucial para mantener la integridad de su base de datos.
Me encontré con esto también. Sería muy bueno tener esto manejado por defecto sin un error 500.
Comentario más útil
Esto se puede solucionar con solo un par de líneas de código. Se supone que los marcos hacen la vida más fácil, por lo que creo que se debe agregar el manejo automático de excepciones para la eliminación del modelo.