Django requête où dans
Comment faire cela à l'aide de django objet de la requête:
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)
- s'il vous plaît montrer votre django modèle. Et il ne serait pas mal d'être le plus descriptif de ce que vous essayez d'accomplir
Vous devez vous connecter pour publier un commentaire.
Deux querysets est documenté moyen de le faire. Il sera une base de données de frapper de toute façon.
DrTyrsa juste au sujet de n'en avait.
La façon de Tyrsa le faisait, il ne serait pas vous donner une liste des identifiants de Test de TestSubjectSet, mais au lieu de vous donner un TestSubjectSet queryset.
Aussi, j'ai été confondu par la test_begin_time et test_end_time champs, parce que vous n'avez pas les mentionner dans vos modèles.
Mise à jour: liste() sur le queryset, parce que, selon le lien DrTyrsa posté, DBs", n'optimisent pas imbriquée querysets très bien".
test_ids
seront évalués uniquement dans la deuxième ligne, la production de absolument la même requête SQL. Si vous voulez faire deux plats de requêtes SQL (au lieu d'un imbriquée), vous devez écrireid__in=list(test_ids)
, mais les deux variatians de mêmeresult
.id
, pas d'objet. 🙂 Il n'y a pas de modèle de code lorsque j'ai répondu et j'ai été sûr que c'est une requête filtrée par plusieurs objet (test_id
(avant DE) ressemble exactement comme clé étrangère).ce travailleur pour moi: