J'ai un problème lors de la création de requêtes "exclude" sur des tables qui ont une relation many-to-many via une troisième table. J'ai une table avec des projets, une table avec des gens et une table relationsship avec les drapeaux « is_green, is_yellow, is_red », comme:Exclure une relation many-to-many via une troisième table
class Project(models.Model):
...
class Person(models.Model):
projects = models.ManyToManyField(Project, through='Status')
class Status(models.Model):
person = models.ForeignKey(Person)
project = models.ForeignKey(Project)
is_green = models.BooleanField()
...
Maintenant, je veux faire une requête qui renvoie toutes les personnes, l'exclusion de ceux qui font avoir le drapeau "is_red" dans un projet spécifique. Mais le
Person.objects.exclude(project=p, status__is_red=True)
suivant exclut tous ceux qui sont inscrits au projet p mais a le statut = rouge pour tout projet il est inscrit. Y at-il un moyen d'attacher la deuxième condition à la première?
Mon approche était de filtrer directement sur la table d'état, ce qui fonctionne bien sûr. Mais alors j'ai une liste d'objets "Statut" au lieu d'objets "Personne".
Super! Cette idée fonctionne comme souhaité. Bien que la syntaxe doive être légèrement modifiée, car values () donne une liste de dicts (au moins dans v1.0). Cela donne le résultat exact: Person.objects.exclude (id__in = Person.objects.filter (projet = p, statut__is_red = Vrai) .values_list ('id', flat = true)) – Daniel
Ah, oui ... Vous êtes juste sur l'utilisation de values_list. Je suis désolé. :-) – cethegeek