【发布时间】:2013-12-27 02:47:18
【问题描述】:
假设您有一个表示通话记录的模型,其中包含:您呼叫的人 (callid)、通话日期 (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)
【问题讨论】:
-
做一个按calldata排序的查询并检查recontact值?
-
如果每个被叫ID只有一个呼叫,这将起作用。但是因为它们不是唯一的,所以这是行不通的。