À Django, j'ai deux modèles:

class A(models.Model):
    # lots of fields

class B(models.Model):
    a = models.ForeignKey(A)
    member = models.BooleanField()

J'ai besoin de construire une requête qui filtre B et sélectionne tous les A, quelque chose comme ceci:

result = B.objects.filter(member=True).a

L'exemple de code ci-dessus renverra bien sûr une erreur QuerySet has no attribute 'a'

Résultat attendu: un QuerySet contenant uniquement des objets A

Quel est le moyen le meilleur et le plus rapide d'obtenir les fonctionnalités souhaitées?

1
Vingtoft 9 août 2016 à 15:54

3 réponses

Meilleure réponse

Je suppose que vous cherchez quelque chose comme

result = A.objects.filter(b__member=True)
4
Andrii Zarubin 9 août 2016 à 12:57

Une alternative à la réponse d'Andrey Zarubin serait d'itérer sur l'ensemble de requêtes que vous aviez et de créer une liste d'objets.

b_objects = B.objects.filter(member=True)
a_objects = [result.a for result in b_objects]
1
marcusshep 9 août 2016 à 13:00

Le code ci-dessous ne filtrera pas tout, mais il filtrera toutes les valeurs par rapport au champ, peut-être que vous les recherchez

B.objects.filter (member = True) .filter (a__somefield = 'some value')

0
Anand Pujari 9 août 2016 à 13:40