0

我有一张表,其中包含涉及 Sim 卡的任务列表。只有在任务中使用的所有 sims 卡同时可用时才能完成任务

表中的示例任务:

Task1 - IMEI1 & IMEI2
Task2 - IMEI1

如果我有一个只有 IMEI1 的 IMEI 列表,我只想拥有 Task2。如果我有一个带有 IMEI1 和 IMEI2 的列表,我想拥有 Task1 和 Task2。

请注意,我在此列表中有随机数量的模拟人生。

这是我的代码:

class Sim(models.Model):
    msisdn = models.CharField(max_length=20, blank=False, null=False)
    imei = models.CharField(max_length=40, blank=False, null=False, default='IMEI')

class taskInQueue(models.Model):
     simInvolved = models.ManyToManyField(Sim)

所以在一个taskInQueue我有一个或多个Sim参与的任务。在一个函数中,我尝试获取所有涉及模拟人生列表的任务:

sim = getSimInvolved(_imeiList)  #_imeiList is a list of IMEI -> Sim is a list of SIm Objects

首先,我正在做以下事情:

tasks = taskInQueue.objects.filter(simInvolved__in=sim, testsStatus='W').distinct().order_by('pk')

问题是,通过这个查询,我将完成所有涉及至少一个模拟人生的任务。因此,如果我可以使用前面的示例,_imeiList=['IMEI1']我将获得 Task1 和 Task2,而我只能获得 Task2。

那么我如何过滤taskInQueue列表中的所有参与模拟市民_imeiList呢?

4

1 回答 1

1

使用链式过滤器?

tasks = taskInQueue.objects.all()
for sim in sims:
    tasks = tasks.filter(simInvolved=sim)

# in the end tasks will only contains those tasks which required all sims
于 2012-12-19T21:40:13.873 回答