2016-04-09 29 views
0

siparişi vererek id artı n durumları tarafından örneğini almak (mesajlar onların zaman damgası göre sıralanır). Bir konuşma yaparken n mesajları yüklüyorum. Eski mesajlar talep üzerine ajax isteği ile yüklenmelidir.Django sorgu kümesi: Bir <strong>Konuşma</strong> ve <strong>İleti</strong> sınıf var

Benim ilk bakış QuerySet geçerli:

Benim ajax görünümünde
messages = conversation.message_set.all()[:settings.INITIAL_MSG_LOAD] 

, ben eski görüntülenen mesaj (oldest_id) ait pk var.

messages = [] 
append_msg = False 
append_counter = settings.INITIAL_MSG_LOAD 
for message in conversation.message_set.all(): 
    if append_msg: 
     messages.append(message) 
     append_counter -= 1 
     if append_counter == 0: 
      break 
    if message.id == oldest_id: 
     append_msg = True 

Bu isteklerin her ikisi için veritabanına gönderilen SQL sorgularının gerçekten farkında değilim.

Veritabanı 2. istekte tüm iletileri döndürüyor mu? Ve pk verilen sonraki n iletileri almak için daha verimli bir yolu var mı?

cevap

2

Sen çok daha verimli olacak olan bir sorguda bunu yapabilirsiniz: conversation.message_set.filter(id__gt=oldest_id)[:settings.INITIAL_MSG_LOAD]

Açıklama: conversation filtre messages sonra rende satır oldest_id sınırı sayısı id ile settings.INITIAL_MSG_LOAD tarafından messages için varsayılan sipariş ile timestamp

tarafından
+0

Çözümünüzde sıralı kimlikler gerekiyor. Ancak, kimlik yerine zaman damgasıyla filtreleme, aynı sorgulama ile sonuçlanmalıdır. –