바뀜

둘러보기로 가기 검색하러 가기
1,392 바이트 추가됨 ,  2024년 7월 4일 (목) 16:57
잔글
편집 요약 없음
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> 형태로 사용한다.
    
===새로운 속성 만들어 사용하기===
 
===새로운 속성 만들어 사용하기===
282번째 줄: 294번째 줄:  
==유의==
 
==유의==
 
탬플릿에선 위 속성들을 그대로 사용할 수 있지만, 괄호는 빼주고 기입한다.
 
탬플릿에선 위 속성들을 그대로 사용할 수 있지만, 괄호는 빼주고 기입한다.
 +
 +
= 요약 =
 +
 +
== 모델 조회 ==
 +
{| class="wikitable"
 +
|-
 +
!기능
 +
!설명
 +
|-
 +
|all()
 +
|모든 데이터셋을 가져온다.
 +
|-
 +
|get()
 +
|조건에 맞는 것 하나.
 +
|-
 +
|filter()
 +
|조건에 맞는 것 다.
 +
|-
 +
|exclude()
 +
|조건에 맞는 것 빼고 다.
 +
|-
 +
|first()
 +
|처음 하나.
 +
|-
 +
|last()
 +
|마지막 하나.
 +
|-
 +
|exists()
 +
|있나 없나 여부만 True, False로 반환.
 +
모델.objects.filter().exists() 형태로 활용.
 +
|-
 +
|order_by()
 +
|조건에 따라 정리한다.
 +
|}
 
[[분류:장고 뷰]]
 
[[분류:장고 뷰]]

둘러보기 메뉴