Django在ManyToManyField上查询填充

时间:2012-12-19 21:12:28

标签: django django-models

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

表中的示例任务:

Task1 - IMEI1 & IMEI2
Task2 - IMEI1

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

请注意我在此列表中有随机数量的SIM卡。

这是我的代码:

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参与了这项任务。在一个函数中,我尝试获取涉及sims列表的所有任务:

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')

问题是,通过这个查询,我将完成至少涉及一个sims的所有任务。因此,如果我可以使用_imeiList=['IMEI1']我的前一个示例,我将获得Task1& Task2,但我必须只获得Task2。

那么我如何过滤taskInQueue列表_imeiList中包含所有参与模拟人的{{1}}?

1 个答案:

答案 0 :(得分: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
相关问题