2012-10-04 26 views
7

tôi có các mô hình sau:Đoàn tự do chính nước ngoài và chương trình liên quan đến mặt hàng - Django

class Company(CachedModel): 
    name = models.CharField(max_length=255) 

class UserExtendedProfile(CachedModel): 

    company = models.ForeignKey(Company) 
    user = models.ForeignKey(User) 

tôi về cơ bản cần phải có được một danh sách người dùng ra lệnh bởi công ty như thế này:

Company A 
    User 1 
    User 2 

Company B 
    User 3 
    user 4 

tôi đã cố gắng một vài điều, và gần nhất tôi có thể nhận được là:

users = UserExtendedProfile.objects.values('company', 'user').order_by('company') 

Tuy nhiên điều này sẽ cho tôi kết quả như sau:

[{'company': 1L, 'user': 17L}, {'company': 1L, 'user': 6L}, {'company': 2L, 'user': 15L}] 

Mọi đầu vào?

Cảm ơn

+0

Kết quả ví dụ của bạn không tổng hợp hoặc đếm. –

+0

oops .. xin lỗi .. cần cập nhật văn bản. – karthikr

+0

tại sao bạn không thử tham gia và truy vấn thô –

Trả lời

7

Bạn có thể thêm nhiều đối số vào phương thức order_by() của mình. Do đó bạn có thể đặt hàng bên trong thứ tự.

users = UserExtendedProfile.objects.values('company', 'user').order_by('company', 'user') 

Đối với một cấu trúc như:

[{ company: [user1, user2, ] }, ] 

Hãy thử sử dụng một defaultdict

from collections import defaultdict 
users = defaultdict(list) 
for result in UserExtendedProfile.objects.values('company', 'user').order_by('company', 'user'): 
    users[result['company']].append(result['user']) 

Với điều này bạn sẽ nhận được trên người dùng cấu trúc mà bạn muốn.

+0

nhưng, đây chỉ là một cách khác để đại diện cho tập kết quả, tôi đang tìm một cái gì đó như: '{company: [user1, user2,]}' – karthikr

+0

Tôi đã chỉnh sửa bài đăng với câu trả lời. Tôi không nghĩ rằng django có bất kỳ cách nào để làm điều đó trực tiếp từ queryset. Tuy nhiên, phản hồi tôi đã đăng nên có câu trả lời của bạn. Kính trọng – andrefsp

+0

Tuyệt vời .. Tôi chỉ cần tìm ra một cách để có được các đối tượng thay vì các id, và tôi tất cả các thiết lập .. Cảm ơn :) – karthikr

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