LEFT JOIN Django ORM: 원시 SQL 쿼리의 대안
질문:
고려하세요. 다음 모델:
class Volunteer(models.Model): ... class Department(models.Model): ... class DepartmentVolunteer(models.Model): ...
할당된 자원봉사자가 없는 모든 부서를 쿼리하려면 다음 SQL 문을 사용할 수 있습니다.
SELECT d.name FROM vsp_department AS d LEFT JOIN vsp_departmentvolunteer AS dv ON d.id = dv.department_id WHERE dv.department_id IS NULL;
이 쿼리를 수행하는 데 더 Django와 유사한 방법이 있습니까? , 아니면 원시를 고수해야합니까? SQL?
답변:
Django는 filter() 메서드를 사용하여 동일한 쿼리를 수행하는 보다 간결하고 표현력이 풍부한 방법을 제공합니다.
qs = Department.objects.filter( departmentvolunteer__isnull=True).values_list('name', flat=True)
이 쿼리는 Django 문서에 설명된 대로 Department와 DepartmentVolunteer 간의 다중 값 관계에 걸쳐 있습니다. https://docs.djangoproject.com/en/stable/topics/db/queries/#spanning-multi-valued-relationships
Django에서 생성된 결과 쿼리는 다음과 같습니다.
SELECT "app_department"."name" FROM "app_department" LEFT OUTER JOIN "app_departmentvolunteer" ON ("app_department"."id" = "app_departmentvolunteer"."department_id") WHERE "app_departmentvolunteer"."id" IS NULL
이 접근 방식을 사용하면 원시 SQL이 필요하지 않으며 읽기 쉽고 유지 관리하기 쉬운 쿼리가 제공됩니다.
위 내용은 원시 SQL 없이 Django에서 할당된 자원 봉사자가 없는 부서를 효율적으로 쿼리하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!