2013-12-09 112 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()'得到的响应。 –