2011-01-18 30 views
6

tôi cần phải lấy một danh sách các bản ghi cho bảng sau với giá trị khác biệt liên quan đến tên:Lấy hồ sơ riêng biệt dựa trên một cột trên Django

Class C: 

name    value 
A ------------------ 10 
A ------------------ 20 
A ------------------ 20 
B ------------------ 50 
C ------------------ 20 
D ------------------ 10 
B ------------------ 10 
A ------------------ 30 

tôi cần phải thoát khỏi tất cả các giá trị trùng lặp cho và chỉ hiển thị thông tin sau:

name    value 
A ------------------ 30 
B ------------------ 10 
C ------------------ 20 
D ------------------ 10 

Như bạn có thể thấy, nó gần như trông giống như bộ python. Tôi có lẽ có thể tạo ra các thiết lập bằng cách sử dụng Python, nhưng tôi tự hỏi nếu ORM Django có tính năng này.

Tôi đã thử sử dụng riêng biệt nhưng không chấp nhận bất kỳ đối số nào để chỉ định cột nào phải có giá trị riêng biệt. Bất kỳ ý tưởng làm thế nào để có được truy vấn này làm việc?

+1

Bạn có chỉ muốn giá trị đầu tiên cho mỗi tên hay không? –

+0

Hoặc là đầu tiên hoặc cuối cùng. – mohi666

+0

Bạn nên chọn một, vì giá trị đầu tiên và cuối cùng là khác nhau. Bạn có thực sự muốn ngẫu nhiên tùy ý không? – sdolan

Trả lời

16

.distinct() là công cụ này, nhưng đây là cú pháp tôi đã sử dụng:

Model.objects.values_list('name', flat=True).distinct() 

Bằng cách này bạn chỉ nhận được một danh sách [A, B, C, D] các giá trị, không phải là đối tượng themseleves.

+1

Điều này sẽ chỉ hoạt động với PostgreSQL. Nếu bạn đang sử dụng MySQL hoặc SQLite, bạn sẽ không may mắn. –

+3

@SerafimS. Điều này làm việc trong MySQL và SQLite. Làm * khác biệt trên * không hoạt động PostgreSQL, nhưng truy vấn trong câu trả lời này không làm khác biệt! – dbn

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