|
|
(다른 사용자 한 명의 중간 판 11개는 보이지 않습니다) |
1번째 줄: |
1번째 줄: |
| {{장고}} | | {{장고}} |
|
| |
|
| ==데이터 불러오기==
| |
| <br /> | | <br /> |
|
| |
| ===모델의 pk 얻기===
| |
| 모델명.id 가 pk이다.
| |
| <br />
| |
| ===객체 조회===
| |
| pk를 알면 다음과 같이 해당 객체를 불러올 수 있다. <code>모델.objects.get(id=pk)</code><syntaxhighlight lang="python">
| |
| from django.shortcuts import get_object_or_404#기본키값에 해당하는 모델이 없을 경우 404 에러 반환.
| |
| from .models import 모델명#모델을 임포트 한다.
| |
|
| |
| 객체 = 모델.objects.get(pk=기본키값) #없으면 에러가 나는데, 서버에러로 인식한다.
| |
| 객체 = 모델.objects.get(id=기본키값) #위와 동일
| |
| 객체 = 모델.objects.filter(id=기본키값) #위와 동일
| |
| 객체 = get_object_or_404(모델명, pk=기본키값) #서버에러가 나지 않게끔.
| |
|
| |
|
| |
| </syntaxhighlight><br />
| |
| ===목록 조회===
| |
| <syntaxhighlight lang="python">
| |
| from django.shortcuts import render
| |
| from .models import 모델명#모델을 임포트 한다.
| |
|
| |
| #모델.objects는 객체목록을 받는다는 의미이다.
| |
| def index(request):
| |
| 목록 = 모델.objects.order_by('-create_date') #create_date속성의 역순으로 정리하라는 의미.
| |
| context={'템플릿에서 쓸 변수명':목록)
| |
| return render(request, '템플릿', context)
| |
| </syntaxhighlight>
| |
|
| |
| ===객체 다 가져오기===
| |
| <syntaxhighlight lang="python">
| |
| from django.shortcuts import render
| |
| from .models import 모델명#모델을 임포트 한다.
| |
|
| |
| #모델.objects는 객체목록을 받는다는 의미이다.
| |
| def index(request):
| |
| 목록 = 모델.objects.all
| |
| </syntaxhighlight>모델.objects.all[:5] 처럼 상위 5개만 가져오는 방식도 가능.
| |
|
| |
| ===필터로 걸러서 가져오기===
| |
| <syntaxhighlight lang="python">
| |
| from django.shortcuts import render
| |
| from .models import 모델명#모델을 임포트 한다.
| |
|
| |
| #모델.objects는 객체목록을 받는다는 의미이다.
| |
| def index(request):
| |
| 목록 = 모델.objects.filter(칼럼명 = True, >0 따위의 조건들...)
| |
| 목록2= 목록.objects.filter(조건들..)#객체에 또다시 필터를 걸 수도 있다.
| |
| </syntaxhighlight>필터는 몇번이라도 걸 수 있는데, 장고는 지연평가 방식을 사용하기 때문에 실제로 데이터를 질의하는 것은 한 번 뿐이다. 덕분에 부하가 걸리지 않고도 filter를 자유롭게 사용할 수 있다.<syntaxhighlight lang="python">
| |
| def index(request):
| |
| 목록 = 모델.objects.filter(칼럼명 = True, >0 따위의 조건들...)
| |
| .filter(조건)
| |
| .filter(조건2)
| |
| </syntaxhighlight>filter에서 각종 연산자를 사용할 땐 '__'를 붙인다.<syntaxhighlight lang="python">
| |
| def index(request):
| |
| 목록 = 모델.objects.filter(속성__startswith='시작할단어')
| |
| </syntaxhighlight>
| |
|
| |
| ===제외하기===
| |
| 필터로 원하는 조건을 받아들이는 것과 반대로, 조건에 따라 제외하는 것도 가능하다. 필터와 동일하게 중첩으로 걸 수 있다.<syntaxhighlight lang="python">
| |
| from django.shortcuts import render
| |
| from .models import 모델명#모델을 임포트 한다.
| |
|
| |
| def index(request):
| |
| 목록 = 모델.objects.exclude(칼럼명 = True, >0 따위의 조건들...)
| |
| </syntaxhighlight>
| |
|
| |
| ===삭제하기===
| |
| 해당 객체를 불러온 후 delete()를 붙여준다.<syntaxhighlight lang="python">
| |
| def index(request):
| |
| 목록 = 모델.objects.exclude(칼럼명 = True, >0 따위의 조건들...).delete() #조건을 제외한 것들을 삭제한다.
| |
| </syntaxhighlight>
| |
| ===특정단어 검색===
| |
| 속성에 특정 단어가 포함된 객체를 불러올 땐 다음과 같이 한다. <code>모델.objects.filter(속성__contains='장고')</code> (언더바가 2개임에 유의)
| |
|
| |
| ===객체의 속성에 접근===
| |
| 모델.속성 형태로 속성에 접근 가능하다. 일반적으로
| |
|
| |
| <code>객체 = 모델.objects.get(id=pk)</code>
| |
|
| |
| 객체.속성 형태로 접근한다.(수정을 하고 반드시 저장을 해주어야 한다.)
| |
|
| |
| ===외래키 연결===
| |
| 모델에서 외래키로 1:N 연결을 한 경우.
| |
|
| |
| 외래키가 연결된 모델의 경우, 외래키 필드에 해당 키의 아이디(pk)를 넣어주면 된다.
| |
|
| |
| ex) answer(question=질문키, 기타등등 필드 채우기)
| |
|
| |
| 이후 answer.save()를 하면 해당 질문에 대한 답변이 저장된다.
| |
|
| |
| answer.question 을 사용하면 어느 질문에 달린 것인지, 질문의 id를 얻어올 수 있다.
| |
|
| |
| 하위에서 상위모델로 갈 땐 <code>모델.상위모델</code> 형태로 접근. 하위모델에서 자신과 연결된 상위모델을 조회할 수 있다.
| |
|
| |
| 상위에서 하위모델로 갈 땐 <code>모델.하위모델_set</code> 형태로 접근.
| |
|
| |
| ===질문에서 답변 뽑아내기===
| |
| 반대로 질문에서 여러 답변들이 어떤 게 달렸는지 추출할 수도 있다.
| |
|
| |
| 모델.연결모델_set.all 를 실행하면 모델에 foreign키로 연결모델들 객체를 얻을 수 있다.
| |
|
| |
| 모델.연결모델_set.all.count 는 몇 개가 있는지 세어주고.
| |
|
| |
| 이처럼 속성을 가져오는 것은 탬플릿에서도 사용이 가능하다.
| |
|
| |
| <br />
| |
|
| |
| ==데이터 저장하기==
| |
|
| |
| ===객체 저장===
| |
| 객체(모델)를 조회, 조작한 후 모델<code>.save()</code>를 실행한다.
| |
|
| |
| ==데이터 삭제==
| |
|
| |
| ===객체 삭제===
| |
| 조회, 조작한 후 <code>모델.delete()</code>를 실행.
| |
|
| |
|
| ==권한관리== | | ==권한관리== |
140번째 줄: |
23번째 줄: |
| </syntaxhighlight> | | </syntaxhighlight> |
|
| |
|
| ==== 클래스형 뷰라면? ==== | | ====클래스형 뷰라면?==== |
| 함수형 뷰라면 위처럼 데코레이터를 두면 되지만, 클래스형 뷰라면 앞에 상속을 한 번 더 해준다.<syntaxhighlight lang="python"> | | 함수형 뷰라면 위처럼 데코레이터를 두면 되지만, 클래스형 뷰라면 앞에 상속을 한 번 더 해준다.<syntaxhighlight lang="python"> |
| from django.contrib.auth.mixins import LoginRequiredMixin | | from django.contrib.auth.mixins import LoginRequiredMixin |