Comment faire cela en utilisant une requête d'objet Django:
SELECT * FROM test WHERE (test_id IN (SELECT test_id FROM test_subject_set)) AND (test_begin_time < '') AND (test_end_time > '')
Le modèle:
class Test(models.Model):
id = models.AutoField(primary_key=True)
user = models.ForeignKey(User)
groups = models.ManyToManyField(Group)
class TestSubjectSet(models.Model):
id = models.AutoField(primary_key=True)
test = models.ForeignKey(Test)
Deux ensembles de requêtes sont documentés manière de le faire. Ce sera quand même une base de données touchée.
test_ids = Subject.objects.all()
result = Test.objects.filter(test_id__in=test_ids).filter([some other filtering])
DrTyrsa avait à peu près tout.
test_ids = list(TestSubjectSet.objects.all().values_list('test_id', flat=True))
result = Test.objects.filter(id__in=test_ids, test_begin_time__lt='', test_end_time__gt='')
Ce que Tyrsa faisait ne vous donnait pas la liste des identifiants de test de TestSubjectSet, mais plutôt un ensemble de requêtes TestSubjectSet.
De plus, les champs test_begin_time et test_end_time ont semé la confusion dans la mesure où vous ne les avez pas mentionnés dans vos modèles.
Mise à jour: liste utilisée () sur le jeu de requêtes, car, selon le lien affiché par DrTyrsa, les bases de données "n'optimisent pas très bien les jeux de requêtes imbriqués".
cet ouvrier pour moi:
Line.objects.filter(pk__in=[1, 2, 3])