2012-12-19 80 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 –