2012-12-19 51 views
0

我有一张表,其中包含一个涉及SIM卡的任务列表。如果在任务中使用的所有的模拟市民卡可在同一时间的任务只能做ManyToManyField上的Django查询填充

表中的示例任务:

Task1 - IMEI1 & IMEI2 
Task2 - IMEI1 

如果我有IMEI的列表,只有IMEI1,只有我想要有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

回答

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 
+0

嗯,事情是我不知道IMEI号码,我将在我的名单!它可以是一个,它可以是两个,它可以是三个或五个...所以我不能使用这个:(这就是为什么我卡住了:s –

+0

然后使用for循环,我已经更新了解决方案。 IMEI,你期待,最大的任务? –

+0

嗯,预计最多4个SIM。如果我链过滤器,我将只有任务与列表中的所有SIM卡?所以,如果我拿这个例子,我只会有Task1 –