2013-12-09 158 views
1

假設您有一個表示呼叫記錄的模型,其中包含:您呼叫的人(呼叫號),呼叫日期(呼叫)以及呼叫者是否需要呼叫重新或不重新。僅返回每個呼叫者的最近呼叫

class CallLog(models.Model): 
    id = models.AutoField(primary_key=True) 
    calledid = models.BigIntegerField() 
    calldate = models.DateField() 
    recontact = models.BooleanField() 

我想要做的就是收集一套calledid的是,在他們的最後一次通話鑑定,他們不希望再次(recontact=False)聯絡。 calledid並不是唯一的,同一個人可能有多個呼叫導致以前沒有重新聯繫,因此我們必須始終確定是否應根據他們最近的呼叫重新聯繫。

我該怎麼做呢?


這是我到目前爲止已經或試驗...不知道,如果這個工程沒有

calls = CallLog.objects.order_by("-calldate") 

seen = set() 
seencalledid = set() 
keep = [] 

for o in calls: 
    if o.calleid not in seen: 
     keep.append(o) 
    seen.add(o.calledid) 
     if o.recontact: 
      seencalledid.add(o.callid) 

no_recontact = CallLogs.filter(calledid__in = seencalledid).values_list('calledid',flat=True) 
+0

按照calldata排序的查詢並檢查recontact值嗎? – M4rtini

+0

如果每個被叫號碼只有一個呼叫,這將工作。但是因爲它們不是獨一無二的,所以這不起作用。 –

回答

0

這產生期望的結果,但必須有捕捉到了這個信息的迅捷方式。

calls = CallLog.objects.order_by("-calldate") 

seen = set() 
seencallid = set() 
keep = [] 

for o in calls: 
    if o.calledid not in seen: 
     keep.append(o) 
    seen.add(o.calledid) 
     if o.recontact: 
      seencallid.add(o.callid) 

no_recontact = CallLogs.filter(callid__in = seencallid).values_list('calledid',flat=True) 
0

每calledid幾個電話是你爲什麼會以日期排序的原因。在分類列表中的最後一條記錄應該是你想要什麼 django - get the latest record with filter

Model.objects.filter(calledid=ID).order_by('-calldate')[0] 
+0

我想要做的就是收集那個在最後一次調用中被稱爲'calledid'的SET,確定他們不想再次聯繫(recontact = False)。這隻會返回一個我可以用'.latest()'得到的響應。 –