假设您有一个代表呼叫日志的模型,其中包含:您呼叫的人(被叫),呼叫的日期(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)
答案 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)