프로젝트를 리팩토링 해야 하는데 django의 queryset에 대한 이해가 부족한 것 같아 정리를 해본다.
아직 제대로 query를 사용하지 못하는 것 같다. 정리를 하면서 리팩토링을 해야지!
필드 룩업은 장고에서 SQL문을 검색할때 사용하는 방법이다.
아래와 같이 사용할 수 있다.
# SELECT * FROM book_list WHERE pub_date <= '2022-01-01';
-> Book.objects.filter(pub_data__lte = '2022-01-01')
#SELECT ...WHERE name ILIKE 'python backend';
-> Book.objects.get(name__iexact ='python backend')
# ILIKE and iexact에서 i는 ignore , 즉 대소문자 구문 무시
#SELECT ... WHERE headline LIKE '%python%';
-> Book.objects.get(headline__contain='python')
# LIKE는 부분적으로 일치하는 컬럼을 찾을 때 사용된다.
#SELECT ... WHERE id IN (1,3,4);
-> Book.objects.filter(id__in = [1,3,4])
#SELECT ... WHERE user.id IN (SELECT id FROM ... WHERE NAME LIKE '%django%')
inner_qs = USER.objects.filter(name__contains='django')
books_list = Book.objects.fileter(user = inner_qs)
여기서 제일 마지막 쿼리문이 흥미로웠다.
inner_qs에 query문을 저장한 뒤 원하는 곳에서 filter의 조건으로 사용을 하다니
지금까지 한번도 해본적 없는 방법이었는데 리팩토링때 사용해야겠다.
쿼리를 조인 할 때도 필드룩업을 사용한다.
Books.objects.filter(lib__location = 'seoul')
# lib은 Foreign Key / lib의 location이 서울인것을 가져온다.

from django.db.models import Q
####자료출처 : 유튜버 미쿡엔지니어