2011-10-18 21 views

Trả lời

74

Sử dụng các phương pháp .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'}] 

Lưu ý: kết quả là một QuerySet mà chủ yếu là hoạt động như một danh sách, nhưng không thực sự là một thể hiện của list. Sử dụng list(Blog.objects.values(…)) nếu bạn thực sự cần một phiên bản của list.

+4

có bạn chỉ định trường nào bạn muốn 'values ​​()' trả về bằng cách chuyển chúng vào làm đối số. Ngoài ra hãy cẩn thận mặc dù có vẻ như giá trị trả về một danh sách các dicts của nó thực sự là một '' và không phải là một danh sách. – dm03514

+1

điều này không thực sự trả về một danh sách mặc dù – astreltsov

+0

Cảm ơn! Đã cập nhật. –

2

Bạn không xác định chính xác từ điển sẽ trông như thế nào, nhưng rất có thể bạn đang đề cập đến QuerySet.values(). Từ official django documentation:

Trả về một ValuesQuerySet - một lớp con QuerySet trả điển khi sử dụng như một iterable, chứ không phải là mô hình thẩm đối tượng.

Mỗi bộ từ điển đó đại diện cho một đối tượng, với các phím tương ứng với tên thuộc tính của đối tượng mô hình.

14

Phương pháp .values() sẽ trả về kết quả loại ValuesQuerySet thường là điều bạn cần trong hầu hết các trường hợp.

Nhưng nếu muốn, bạn có thể biến ValuesQuerySet thành danh sách Python gốc bằng cách sử dụng tính năng đọc danh sách Python như được minh họa trong ví dụ bên dưới.

result = Blog.objects.values()    # return ValuesQuerySet object 
list_result = [entry for entry in result] # converts ValuesQuerySet into Python list 
return list_result 

tôi tìm giúp trên nếu bạn đang viết bài kiểm tra đơn vị và cần phải khẳng định rằng giá trị lợi nhuận kỳ vọng của một hàm phù hợp với giá trị trả về thực tế, trong trường hợp cả hai expected_resultactual_result phải cùng loại (ví dụ như từ điển).

actual_result = some_function() 
expected_result = { 
    # dictionary content here ... 
} 
assert expected_result == actual_result 
+5

Hoặc bạn có thể đơn giản hóa việc chuyển đổi thành danh sách với 'danh sách (kết quả)' này –

0

Bạn có thể sử dụng phương pháp values() trên dict bạn nhận được từ các mô hình lĩnh vực Django bạn thực hiện các truy vấn trên và sau đó bạn có thể dễ dàng truy cập vào từng trường theo một giá trị chỉ mục.

Gọi nó như thế này -

myList = dictOfSomeData.values() 
itemNumberThree = myList[2] #If there's a value in that index off course... 
2

Nếu bạn cần loại dữ liệu bản địa đối với một số lý do (ví dụ JSON serialization) này là nhanh chóng 'n' cách bẩn của tôi để làm điều đó:

data = [{'id': blog.pk, 'name': blog.name} for blog in blogs] 

Như bạn có thể thấy việc xây dựng dict bên trong danh sách không thực sự là DRY nên nếu ai đó biết cách tốt hơn ...

Các vấn đề liên quan