본문 바로가기

BackEnd/Django

[Django] 이미지 삭제하기

class ImageDetail(APIView):

def find_own_image(self, image_id, user):
try:
image = models.Image.objects.get(id=image_id, creator=user)
return image
except models.Image.DoesNotExist:
return None

def put(self, request, image_id, format_=None):
user = request.user

image = self.find_own_image(image_id, user)

if image is None:

return Response(status=status.HTTP_401_UNAUTHORIZED)

serializer = serializers.InputImageSerializer(
image, data=request.data, partial=True)

if serializer.is_valid():
......

def delete(self, request, image_id, format=None):

user = request.user

image = self.find_own_image(image_id, user)

if image is None:

return Response(status=status.HTTP_401_UNAUTHORIZED)

image.delete()

return Response(status=status.HTTP_204_NO_CONTENT)


기존의 ImageDetail에 delete까지 추가되었다. 

내가 만든 이미지를 찾는 과정은 새로운 function으로 만들었다.


여기서 문제가 머냐면


삭제할 때, 남들이 해 둔 좋아요 코멘트도 삭제 되는데!


class Notification(image_models.TimeStampedModel) :
TYPE_CHOICES = (
('like', 'Like'),
('comment', 'Comment'),
('follow', 'Follow')
)


creator = models.ForeignKey(user_models.User, on_delete=models.PROTECT, related_name='creator')
to = models.ForeignKey(user_models.User, on_delete=models.PROTECT, related_name='to')
Notification_type = models.CharField(max_length=20, choices=TYPE_CHOICES)
image = models.ForeignKey(image_models.Image, on_delete=models.PROTECT, null=True, blank=True)
comment = models.TextField(null=True, blank=True)

class Meta:
ordering = ['-created_at']


Notification에 on_delete속성값이 models.PROTECT로 보호받고 있다.


그래서 댓글, 좋아요가 있는 글은 삭제가 불가능해진다. 


https://stackoverflow.com/a/38389488/1136110


다음 주소에서 해결방법이 나와있는데


on_delete 를 CASCADE방식으로 해결하면 된다는 것




'BackEnd > Django' 카테고리의 다른 글

[Django] User password Change  (0) 2018.11.08
[Django]User Profile 수정하기  (0) 2018.11.08
[Django] 이미지 수정하기!  (0) 2018.11.07
[Django] 좋아요 리스트 보기  (0) 2018.11.07
[Django]단일 이미지 보기  (0) 2018.11.07