Sim カードに関連するタスクのリストを含む表があります。タスクは、タスクで使用されるすべての SIM カードが同時に利用可能な場合にのみ実行できます。
表のタスクの例:
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
私はそのタスクに 1 人以上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')
問題は、このクエリを使用すると、少なくとも 1 人のシムが関与するすべてのタスクが得られることです。したがって、前の例で を使用すると_imeiList=['IMEI1']
、Task1 と Task2 を取得できますが、Task2 のみを取得する必要があります。
taskInQueue
では、どのシムがリストに含まれているかをフィルタリングするにはどうすればよい_imeiList
でしょうか?