2008-12-10 34 views
8

Tôi có một vài Mô hình và muốn trả về một bộ truy vấn của tất cả các Mô hình thuộc về một Người dùng, tôi tự hỏi liệu có thể trả về một Bộ truy vấn từ nhiều Mô hình không?Truy vấn Django trên Mô hình?

+0

Trùng lặp: http://stackoverflow.com/questions/313137/using-django-how-can-i-combine-two-queries-from-separate-models-into-one-query –

Trả lời

8

Tôi giả định rằng bạn có nghĩa là bạn muốn trả về một bộ truy vấn đơn của tất cả các đối tượng thuộc về người dùng từ mỗi mô hình.

Bạn có cần một queryset hoặc chỉ có thể lặp lại không? AFAIK, qs không đồng nhất là không thể. Tuy nhiên, bạn có thể dễ dàng trả về một danh sách, một trình lặp vòng lặp chuỗi (itertools) hoặc một trình tạo để thực hiện những gì bạn muốn. Điều này giả định rằng các mô hình tham chiếu đến người dùng được biết trước. Giả sử related_name mặc định, thuộc tính queryset liên quan có thể được truy cập từ người dùng ví dụ thông qua tên của mô hình:

qs = getattr(user, '%s_set' % model_name.lower()); 

Tất nhiên, sử dụng bất kỳ danh sách không đồng nhất bạn sẽ hoặc là chỉ có thể sử dụng các trường hoặc các phương pháp được định nghĩa trên tất cả các mô hình như vậy hoặc bạn sẽ phải xác định loại của từng đối tượng để thực hiện bất kỳ hành động cụ thể nào.

3

Mô hình của bạn phải chứa các trường mối quan hệ (ForeigKey và ManyToManyField), với bộ đối số từ khóa related_name. Kiểm tra tài liệu here.

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