仅返回每个呼叫者的最近呼叫

时间:2013-12-09 20:23:45

标签: python django

假设您有一个代表呼叫日志的模型,其中包含:您呼叫的人(被叫),呼叫的日期(calldate),以及是否需要重新呼叫被呼叫的人。

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)

2 个答案:

答案 0 :(得分:0)

每个被调用的几个调用是您按日期排序的原因。该排序列表中的最后一条记录应该是您想要的 django - get the latest record with filter

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

答案 1 :(得分: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)