13. 모델 필터링 (Model Filtering) 2

data_hamster·2023년 4월 25일
0

학습 주제
Django Shell - 모델 필터링 2

학습 내용
filter 복습

filter(필드이름__조건=무엇) 이런 형식이다.
이번시간엔 startswith 외에 다른 조건에 대해 알아본다.

장고 도큐먼트 - QuerySet method reference로 들어간다

그 뒤, Field lookups를 찾는다.

contains


대소문자를 구분함.

icontains


contains과 동일하나 대소문자를 구분하지 않음.

예: 휴가라는 단어가 포함된 모든 질문을 얻고자 한다.
현재 휴가가 들어간 질문은 한개이므로 1개 더 생성한다.
q = Question(question_text ="휴가를 가실 계획인가요?")
q.save()

Question.objects.filter(question_text__contains="휴가")

휴가를 포함하는 질문이 2개 출력됨.

gt


무엇보다 큰 것들을 가져온다.

예: 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()



바다만 남아 있다.

regex 정규표현식

정규표현식 복습은,

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()로 연결할 수 있음.
그러나 정규표현식은 훨씬 더 강력한 조건들을 표현할 수 있기에 알아두는 것이 좋다.

profile
반갑습니다 햄스터 좋아합니다

0개의 댓글