モデル:
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()
ビュー:
class RegionDelete(generics.DestroyAPIView):
queryset = Region.objects.all()
serializer_class = RegionSerializer
HTTPコード423またはその他。
エラーの詳細。
Django例外
ミックスイン:
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()
このケースを処理するには、カスタムメソッドを作成する必要があります。 標準的なケースにさらに複雑さを加えることを正当化するのに十分なほど一般的ではないと思います。
これは、ほんの数行のコードで修正できます。 フレームワークは作業を楽にするはずなので、モデル削除の自動例外処理を追加する必要があると思います。
古い問題ですが、それでも非常に関連性があります。
私の見解では、これは非常に一般的であり、データベースの整合性を維持するための重要な部分として機能します。
これにも遭遇します。 これをデフォルトで500エラーなしで処理できると非常に便利です。
最も参考になるコメント
これは、ほんの数行のコードで修正できます。 フレームワークは作業を楽にするはずなので、モデル削除の自動例外処理を追加する必要があると思います。