웹프로그래밍/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.id
로 redirect
했었는데 관계가 사라지니 다음과 같이 접근이 불가능하여 미리 변수에 저장한 후에 사용하였습니다.