Django의 Select_related 메서드
이 기사는 쿼리 세트, 이러한 쿼리를 작동하는 방법 및 Django에서 select_related()
메서드를 사용하는 방법을 다룹니다. Django 프레임워크를 사용하면서 주로 query set
을 사용합니다.
데이터베이스가 있고 쿼리를 수행한다고 가정합니다. supplier
라는 모델이 있다고 가정하고 이 supplier
를 통해 모든 공급자를 파악하여 공급자 목록을 갖게 되며 이 목록을 query set
이라고 합니다. .
select_related()
메서드를 사용하여 Django에서 모델의 관련 쿼리 필터링
로직을 작성하고 두 개의 모델을 생성할 views.py
파일을 살펴보겠습니다. select_related()
메서드의 사용 사례를 설명하는 코드를 작성하기 시작합니다.
먼저 objects.all()
을 사용하여 직원을 가져왔습니다. 해당 직원의 목록을 반복하고 emplyee.name
을 사용하여 직원 이름을 인쇄해야 합니다.
암호:
from company.models import Department, Employee
def home(request):
employees = Employee.objects.all()
for emplyee in employees:
print(emplyee.name)
출력:
Jane Doe
John Doe
Simpson
John Simpson
디버그 도구를 사용하고 브라우저로 이동하면 모든 직원과 해당 부서 및 세부 정보를 가져오는 것을 볼 수 있습니다. objects.all()
이후 모든 직원을 선택하고 모든 세부 정보를 가져옵니다.
문제는 관련 모델에 접근할 때 시작됩니다. 예를 들어 models.py
파일을 살펴보고 관련된 모델인 employee
모델은 department
자체입니다.
다음 코드를 사용하여 직원 이름과 부서 이름을 인쇄합니다.
암호:
from company.models import Department, Employee
def home(request):
employees = Employee.objects.all()
for emplyee in employees:
print(emplyee.name, emplyee.department.name)
위의 코드에서 emplyee.department
를 사용하며 부서는 외래 키입니다. 부서 이름이 있는 부서
개체를 제공합니다.
출력:
Jane Doe HR
John Doe Accounts
Simpson Purchase
John Simpson Purchase
Django 디버그 도구의 도움으로 Django 애플리케이션을 실행하는 동안 브라우저로 이동하면 여러 쿼리를 볼 수 있습니다. 첫 번째 쿼리에서 모든 직원을 선택하고 두 번째 쿼리에서 id가 1
인 부서를 선택하는 것을 볼 수 있습니다.
employee
의 기본 ID가 동일하더라도 동일한 ID가 있는 경우 ORM은 해당 테이블로 두 번 이동하여 중복 항목을 가져옵니다. 회사에 100명의 직원이 있다고 가정하면 101
쿼리를 실행하므로 department
에서 100
쿼리를 실행하고 employee
에서 쿼리 하나를 실행합니다.
이것은 ORM의 고전적인 무한 일 문제라고도 합니다. select_related()
메서드를 사용하여 해당 직원과 해당 부서를 가져오고 메서드에서 모델의 필드를 전달해야 합니다.
따라서 필드는 관련이 있는 것이 타당하며 이 경우에는 필드를 부서
로 사용합니다.
암호:
from company.models import Department, Employee
def home(request):
employees = Employee.objects.all().select_related("department")
for emplyee in employees:
print(emplyee.name, emplyee.department.name)
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn