2016-02-24 15 views
7

Tôi hỏi câu hỏi này một lần nữa (it was asked back in 2009),Làm thế nào để kết hợp select_related() và value()? (2016)

Chúng tôi biết có một phương pháp values() của QuerySet, khi có một ForeignKey (tác giả, ví dụ), nó cho kết quả như sau:

[{ 'author_id':3, ... }, ...] 

tôi muốn có một kết quả như:

[{ 'author':{'name':'dave',...}, ... }, ...] 

có một cái gì đó chang ed trong các phiên bản mới hơn của Django?

Tôi muốn chuyển đổi tập hợp truy vấn thành kết hợp danh sách và từ điển, có thể không?

Sau đó tôi sẽ lấy đối tượng này và đặt nó vào một đối tượng lớn hơn để tuần tự hóa đối tượng đó. Đó là lý do tại sao tôi không muốn sắp xếp nó ngay lập tức.

Trả lời

5

Bạn có thể truy cập vào các lĩnh vực có liên quan thông qua values() mà không cần thiết phải sử dụng select_related() (chỉ này sẽ được lấy mà không cần tra cứu tiếp theo):

MyModel.objects.values('author__id', 'author__name') 

này sẽ trở lại cấu trúc sau:

[{'author__id': 1, 'author__name': 'Dave'}, {...}] 

Nếu bạn cần nó trong một cấu trúc lồng nhau, bạn sẽ phải chuyển đổi nó sau đó.

Lưu ý rằng đối với quan hệ M2M, điều này trả về một mục nhập danh sách cho mỗi quan hệ M2M, vì vậy có lẽ không phải là hiệu ứng mong muốn. Nhưng đối với OneToOne/ForeignKey quan hệ nó hoạt động tốt.

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