[python] 단일 필드를 선택하는 장고 모델

호출 된 테이블 / 모델 Employees이 있고 단일 필드의 모든 행을 쿼리 세트로 가져오고 싶습니다.

나는 내가 이것을 할 수 있다는 것을 안다 (내가 이것을 올바르게하고 있기를 바랍니다) :

emp_list = Employees.objects.get(all)
emp_names = emp_list.eng_name

모든 필드에 대해 데이터베이스를 쿼리하고 하나만 사용합니까? 더 나은 (더 빠른) 방법이 있습니까?



답변

Employees.objects.values_list('eng_name', flat=True)

모든 eng_names의 단순 목록을 만듭니다 . 한 행에 둘 이상의 필드를 원하면 단순 목록을 수행 할 수 없습니다. 이렇게하면 튜플 목록이 생성됩니다.

Employees.objects.values_list('eng_name', 'rank')


답변

이외에도 values_list으로 다니엘이 언급 당신은 또한 사용할 수 있습니다 only(또는 defer반대의 효과에 대한) 그들의 ID와 지정된 필드를 가지는 객체의 검색어를 얻을 수 있습니다 :

Employees.objects.only('eng_name')

이렇게하면 단일 쿼리가 실행됩니다.

SELECT id, eng_name FROM employees


답변

값보다 필수 필드를 선택할 수 있습니다.

Employee.objects.all().values('eng_name','rank')


답변

Oskar Persson의 답변은 데이터를 컨텍스트 에 전달하고 일반 값 목록 대신 개체 인스턴스 (소품을 쉽게 반복 할 수 있음)를 가져올 때 템플릿 에서 정상적으로 처리하는 것이 더 쉬워지기 때문에이를 처리하는 가장 좋은 방법 입니다.

그 후 원하는 소품을 쉽게 얻을 수 있습니다.

for employee in employees:
    print(employee.eng_name)

또는 템플릿에서 :

{% for employee in employees %}

    <p>{{ employee.eng_name }}</p>

{% endfor %}


답변

다음과 같이 필터와 함께 values_list를 사용할 수 있습니다.

active_emps_first_name = Employees.objects.filter(active=True).values_list('first_name',flat=True)

자세한 내용은 여기


답변

Daniel 대답은 그 자리에서 옳습니다. 둘 이상의 필드를 쿼리하려면 다음을 수행하십시오.

Employee.objects.values_list('eng_name','rank')

그러면 튜플 목록이 취소됩니다. 둘 이상의 필드를 쿼리 할 때는 named = Ture를 사용할 수 없습니다.

또한 해당 정보와 함께 하나의 필드 만 존재하고 pk ID를 알고 있다면 다음을 수행하십시오.

Employee.objects.values_list('eng_name','rank').get(pk=1)


답변