수학과의 좌충우돌 프로그래밍

[Django] 모델 관계 제거하기 본문

웹프로그래밍/Django

[Django] 모델 관계 제거하기

ssung.k 2019. 6. 2. 04:18

model 간에는 관계가 존재합니다. one to one , many to many ,many to one 등 상황에 맞게 관계를 사용하는 건 굉장히 중요하고 유용합니다. 이번에는 상황에 따라 이 관계를 제거하는 방법을 알아보도록 하겠습니다.

 

현재 상황은 Lawyer 라는 변호사 모델에 있고 해당 변호사에게 신청이 들어온 고소장, Report라는 모델이 있습니다. 한 변호사는 여러 고소장을 처리할 수 있기에 두 model은 ForeignKey 로 연결하였습니다. 각각에 대한 field는 중요하지 않으니 생략하도록 하겠습니다.

# models.py 
class Report(models.Model):
  lawyer = models.ForeignKey(Lawyer, on_delete=models.CASCADE, null=True) 
  ...
  
class class Lawyer(models.Model):
  ...

변호사는 신청받은 고소장에 대해서 거부를 할 수 있습니다. 하지만 거부를 한다고 해서 고소장이 삭제되어서는 안됩니다. 즉 고소장을 제거하는 것이 아닌 관계만을 제거해줘야하죠.

# views.py

def lawyer_refuse(request, report_id):
    report = Report.objects.get(id=report_id)
    redirect_id = report.lawyer.id
    report.lawyer = None 
    report.save()
    return redirect('lawyerAccount:mypage', redirect_id)

제거하기 위해서는 위와 같이 None 을 대입하여 관계를 끊어줍니다. 단, 이럴 경우 Report model 의 lawyer field 가 null이 되기 떄문에 model 을 정의 할 때 null=True 를 해줘야 합니다.

위와 같은 경우에는 기존에 report.lawyer.idredirect 했었는데 관계가 사라지니 다음과 같이 접근이 불가능하여 미리 변수에 저장한 후에 사용하였습니다.

Comments