일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- API
- MAC
- java
- es6
- 파이썬
- 알고리즘
- web
- 장고
- django rest framework
- 알고리즘 연습
- javascript
- CSS
- HTML
- AWS
- 알고리즘 문제
- form
- js
- django widget
- 파이썬 알고리즘
- django ORM
- Django
- 알고리즘 풀이
- PYTHON
- Algorithm
- DRF
- 백준
- c++
- Baekjoon
- react
- Git
Archives
- Today
- Total
수학과의 좌충우돌 프로그래밍
[Django] 모델 관계 제거하기 본문
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
했었는데 관계가 사라지니 다음과 같이 접근이 불가능하여 미리 변수에 저장한 후에 사용하였습니다.
'웹프로그래밍 > Django' 카테고리의 다른 글
[Django]message framework 알아보기 (0) | 2019.07.06 |
---|---|
[Django]Date와 Time을 나타내는 template filter (0) | 2019.07.05 |
[Django] render 와 redirect 의 차이 (11) | 2019.05.21 |
[Django]humanize 를 이용해 세 자리마다 콤마찍기 (0) | 2019.05.21 |
[Django] 아임포트를 이용한 결제모듈 만들기 (0) | 2019.05.20 |
Comments