Django QuerySet을 dict 목록으로 변환하려면 어떻게해야합니까? 나는 이것에 대한 답을 찾지 못했기 때문에 모든 사람들이 사용하는 일종의 일반적인 도우미 기능을 놓치고 있는지 궁금합니다.
답변
.values()
방법을 사용하십시오 :
>>> Blog.objects.values()
[{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}],
>>> Blog.objects.values('id', 'name')
[{'id': 1, 'name': 'Beatles Blog'}]
참고 : 결과는 QuerySet
대부분 목록처럼 작동하지만 실제로 list
. list(Blog.objects.values(…))
의 인스턴스가 정말로 필요한 경우 사용하십시오 list
.
답변
이 .values()
메서드 ValuesQuerySet
는 일반적으로 대부분의 경우에 필요한 유형의 결과를 반환합니다 .
그러나 원하는 경우 ValuesQuerySet
아래 예제와 같이 Python 목록 이해를 사용하여 네이티브 Python 목록으로 전환 할 수 있습니다.
result = Blog.objects.values() # return ValuesQuerySet object
list_result = [entry for entry in result] # converts ValuesQuerySet into Python list
return list_result
나는 함수의 기대 수익 값이 실제 리턴 값과 일치하는지 당신이있는 경우 모두 주장 단위 테스트와 필요를 작성하는 경우 위의 도움이 찾을 수 expected_result
와 actual_result
동일한 유형이어야합니다 (예 : 사전).
actual_result = some_function()
expected_result = {
# dictionary content here ...
}
assert expected_result == actual_result
답변
어떤 이유로 든 (예 : JSON 직렬화) 네이티브 데이터 유형이 필요한 경우 이것은이를 수행하는 빠른 ‘n’더러운 방법입니다.
data = [{'id': blog.pk, 'name': blog.name} for blog in blogs]
보시다시피 목록 안에 dict를 작성하는 것은 실제로 DRY가 아니므로 누군가가 더 나은 방법을 알고 있다면 …
답변
사전이 어떤 모습이어야하는지 정확히 정의하지는 않지만 QuerySet.values()
. 로부터 공식 장고 문서 :
반환 값
ValuesQuerySet
—QuerySet
모델 인스턴스 객체가 아니라 반복 가능으로 사용될 때 사전을 반환 하는 하위 클래스입니다.이러한 각 사전은 모델 개체의 속성 이름에 해당하는 키를 사용하여 개체를 나타냅니다.
답변
목록으로 캐스팅 유형
job_reports = JobReport.objects.filter(job_id=job_id, status=1).values('id', 'name')
json.dumps(list(job_reports))
답변
사용할 수 있습니다 values()
쿼리를 수행하는 Django 모델 필드에서 얻은 dict에 메서드를 인덱스 값으로 각 필드에 쉽게 액세스 할 수 있습니다.
이렇게 부르세요-
myList = dictOfSomeData.values()
itemNumberThree = myList[2] #If there's a value in that index off course...
답변
당신이 필요 DjangoJSONEncoder
하고 list
당신하려면 Queryset
에 json
, 심판 : 파이썬 JSON 직렬화 진수 객체를
import json
from django.core.serializers.json import DjangoJSONEncoder
blog = Blog.objects.all().values()
json.dumps(list(blog), cls=DjangoJSONEncoder)