37번째 줄: |
37번째 줄: |
| 객체 = 모델.objects.get(pk=기본키값, 이외옵션.) # 없거나 2개 이상이면 에러가 나는데, 서버에러로 인식한다. | | 객체 = 모델.objects.get(pk=기본키값, 이외옵션.) # 없거나 2개 이상이면 에러가 나는데, 서버에러로 인식한다. |
| 객체 = 모델.objects.get(id=기본키값) # 위와 동일 | | 객체 = 모델.objects.get(id=기본키값) # 위와 동일 |
− | 객체 = 모델.objects.filter(id=기본키값) # 위와 동일하나, 2개 이상도 쿼리셋으로 가져온다. | + | 객체 = 모델.objects.filter(id=기본키값) # 위와 동일하나, 1개도 쿼리셋으로 가져온다. get처럼 쓰려면 맨 뒤에 .first() 혹은 .last()로 하나만 뽑아내자. |
| 객체 = get_object_or_404(모델, pk=기본키값) # 서버에러가 나지 않게끔 404 에러를 발생시킨다. | | 객체 = get_object_or_404(모델, pk=기본키값) # 서버에러가 나지 않게끔 404 에러를 발생시킨다. |
| | | |
169번째 줄: |
169번째 줄: |
| ===특정단어 검색=== | | ===특정단어 검색=== |
| 속성에 특정 단어가 포함된 객체를 불러올 땐 다음과 같이 한다. <code>모델.objects.filter(속성__contains='장고')</code> (언더바가 2개임에 유의) | | 속성에 특정 단어가 포함된 객체를 불러올 땐 다음과 같이 한다. <code>모델.objects.filter(속성__contains='장고')</code> (언더바가 2개임에 유의) |
| + | |
| + | === 쿼리셋에서 제외하기 === |
| + | 필터가 아니라 외부에서 얻은 정보를 토대로 쿼리셋에서 지워야 하는 경우가 있다. |
| + | |
| + | 그럴 땐 쿼리셋 자체를 리스트로 만든 후 리스트에서 remove(객체)를 통해 제거하는 방법이 있다. |
| | | |
| == 다른 모델 불러오기 == | | == 다른 모델 불러오기 == |
183번째 줄: |
188번째 줄: |
| answer.question 을 사용하면 어느 질문에 달린 것인지, 질문의 id를 얻어올 수 있다. | | answer.question 을 사용하면 어느 질문에 달린 것인지, 질문의 id를 얻어올 수 있다. |
| | | |
− | 하위에서 상위모델로 갈 땐 <code>모델.상위모델</code> 형태로 접근. 하위모델에서 자신과 연결된 상위모델을 조회할 수 있다. | + | 하위에서 상위모델로 갈 땐 <code>모델.상위모델</code> 형태로 접근. 하위모델에서 자신과 연결된 상위모델을 조회할 수 있다.(다른 모델을 연결할 땐 대문자를 소문자로 바꾸어주어야 한다.) |
| | | |
− | 상위에서 하위모델로 갈 땐 <code>모델.하위모델_set</code> 형태로 접근.(_set은 아래로 간다는 방향을 지정해주기 위한 기능인듯) | + | 상위에서 하위모델로 갈 땐 <code>모델.하위모델_set.all()</code> 형태로 접근.(_set은 아래로 간다는 방향을 지정해주기 위한 것) |
| ====DB에 접근하는 경우==== | | ====DB에 접근하는 경우==== |
| DB의 칼럼에 접근하여 뽑아내는 경우, 상위모델을 뽑아낼 땐 '<code>모델.상위모델__속성명</code>' 형태로 접근할 수 있다.(모두 소문자로) | | DB의 칼럼에 접근하여 뽑아내는 경우, 상위모델을 뽑아낼 땐 '<code>모델.상위모델__속성명</code>' 형태로 접근할 수 있다.(모두 소문자로) |
252번째 줄: |
257번째 줄: |
| | | |
| posting에선 posting.tag.all() 형태로 연결된 객체셋을 얻을 수 있다. | | posting에선 posting.tag.all() 형태로 연결된 객체셋을 얻을 수 있다. |
| + | |
| + | posting.tag.add(tag객체) 형태로 태그와의 연결을 추가할 수 있다. |
| | | |
| == 데이터 조작하기 == | | == 데이터 조작하기 == |
268번째 줄: |
275번째 줄: |
| context={'템플릿에서 쓸 변수명':목록) | | context={'템플릿에서 쓸 변수명':목록) |
| return render(request, '템플릿', context) | | return render(request, '템플릿', context) |
− | </syntaxhighlight>order_by('?') 로 두면 객체들을 랜덤하게 배치한다. | + | </syntaxhighlight> |
| + | |
| + | * <code>order_by('?')</code> 로 두면 객체들을 랜덤하게 배치한다. |
| + | * <code>order_by('속성', '속성2', ...)</code>로 두면 여러 개의 기준으로 정렬할 수 있다. |
| + | * 속성이 다른 모델과 연결된 경우, <code>order_by('모델__속성')</code> 형태로 연결된 모델의 속성을 사용할 수도 있다. |
| + | * 하위속성을 가져와 정렬하는 경우 <code>school.homeroom_set.all().order_by('name')</code> 형태로 사용한다. |
| | | |
| ===새로운 속성 만들어 사용하기=== | | ===새로운 속성 만들어 사용하기=== |
311번째 줄: |
323번째 줄: |
| |exists() | | |exists() |
| |있나 없나 여부만 True, False로 반환. | | |있나 없나 여부만 True, False로 반환. |
| + | 모델.objects.filter().exists() 형태로 활용. |
| |- | | |- |
| |order_by() | | |order_by() |