2011-08-04 15 views
11

: DB iseDjango ORM: Ben şuna benzer modele sahip Grup tarafından ve Max

Requests: user, req_time, req_text 

, kayıtları şöyle olabilir:

id, user_id, req_time, req_text 
1  1  TIMESTAMP YES 
2  1  TIMESTAMP NO 
3  2  TIMESTAMP YES 

vb

Kullanıcıya göre İstekleri gruplandırır, req_text temelinde İstekleri filtreler ve sonuçta ortaya çıkan sonuç kümesinin maksimum kimliğini seçen bir Django ORM sorgusunu nasıl yazarım. Yani her kullanıcı için, filtre koşuluna uyan ve aynı zamanda en büyük kimliğe sahip olan bir satır döndüreceğim.

cevap

10
from django.db.models.aggregates import Max 

request_values = Requests.objects.filter(req_text='YES') \ 
       .values('user') \ 
       .annotate(max_id=Max('id')) 

Sonra request_values aşağıdaki gibi görünecektir:

[ 
    {'user': 1, 'max_id': 1}, 
    {'user': 2, 'max_id': 4}, 
    {'user': 3, 'max_id': 5}, 
    {'user': 4, 'max_id': 12}, 
    ... 
] 
+1

tipi (request_values) == django.db.models.query.ValuesQuerySet ama ValuesQuerySet elemanları sözlükleri ve artık nesneleri Django değil. Sorgudan bir QuerySet almanın bir yolu var mı? – kev

+1

KEY, sonuçların her satırı tablodan tek bir satırı temsil etmediği için GROUP BY sorgusundan model örneklerini sormak mantıklı değil – Anentropic

+0

Evet, bu kesinlikle anlamlıdır – kev

İlgili konular