๋ชจ๋ธ:
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 ๋๋ ๊ธฐํ.
์ค๋ฅ ์ธ๋ถ์ ๋ณด์
๋๋ค.
์ฅ๊ณ ์์ธ
๋ฏน์ค์ธ:
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 ์ค๋ฅ ์์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๊ฒ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ๋งค์ฐ ์ข์ ๊ฒ์ ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด๊ฒ์ ๋ช ์ค์ ์ฝ๋๋ก ํด๊ฒฐํ ์ ์์ต๋๋ค. ํ๋ ์์ํฌ๋ ์ถ์ ๋ ์ฝ๊ฒ ๋ง๋ค์ด์ฃผ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ธ ์ญ์ ๋ฅผ ์ํ ์๋ ์์ธ ์ฒ๋ฆฌ๊ฐ ์ถ๊ฐ๋์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.