학습 주제
Django Shell - 모델 필터링 2
학습 내용
filter 복습
filter(필드이름__조건=무엇) 이런 형식이다.
이번시간엔 startswith 외에 다른 조건에 대해 알아본다.
장고 도큐먼트 - QuerySet method reference로 들어간다
그 뒤, Field lookups를 찾는다.
대소문자를 구분함.
contains과 동일하나 대소문자를 구분하지 않음.
예: 휴가라는 단어가 포함된 모든 질문을 얻고자 한다.
현재 휴가가 들어간 질문은 한개이므로 1개 더 생성한다.
q = Question(question_text ="휴가를 가실 계획인가요?")
q.save()
Question.objects.filter(question_text__contains="휴가")
휴가를 포함하는 질문이 2개 출력됨.
무엇보다 큰 것들을 가져온다.
예: votes에 적용.
Choice.objects.filter(votes__gt=0)
1개 choice 오브젝트의 votes 값을 5로 수정하고 검색한다.
쿼리를 살펴보면,
만일 필터링된 모든 대상의 votes 값을 0으로 바꿔주고 싶으면 조건 뒤에 .update(votes=0)
을 넣어준다.
Choice.objects.filter(votes__gt=0).update(votes=0)
1은 이번 업데이트가 발생한 대상의 갯수를 의미.
이번엔 votes가 0인 choice를 delete 해본다.
Choice.objects.filter(votes=0).delete()
바다만 남아 있다.
정규표현식 복습은,
https://school.programmers.co.kr/learn/courses/11/11-%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D
정규표현식을 사용하여 '휴가를'로 시작하고, '어디서'를 포함하는 question을 추출한다.
^
무언가로 시작한다
.*
모든 문자가 0개 이상인 연결. 아무문장.
Question.objects.filter(question_text__regex=r'^휴가.*어디서')
쿼리문은,
정규표현식은 contains와 startswith을 사용하면 비슷하게 사용 가능.
다중 필터의 사용.
.fiter().filter()
로 연결할 수 있음.
그러나 정규표현식은 훨씬 더 강력한 조건들을 표현할 수 있기에 알아두는 것이 좋다.