2017-09-06 1 views
0

Je les modèles suivants:Django ORM - ForeignKey avec 3 modèles impliqués

class A(models.Model): 
    ... 

class B(models.Model): 
    a = models.ForeignKey(A) 
    c = models.ForeignKey(C, null=True, blank=True) 

class C(models.Model): 
    ... 

Je voudrais obtenir tous les A qui ont tout B, qui ont tout C = null. J'ai essayé de faire

A.objects.filter(b__c__isnull=True) 

mais ce n'est pas aller chercher les résultats apparemment corrects.

Ai-je raté quelque chose?

+0

un ForeignKey doit se référer à un champ de modèle, pas à une classe de modèle (comme vous l'avez). Si ce n'est que du pseudo-code, vous devriez publier vos modèles et décrire pourquoi votre requête n'obtient pas les résultats corrects. – YPCrumble

Répondre

1

Essayez avec a.b_set.filter(c__isnull=True) , d'abord nous demandons le modèle A, ensuite nous demandons les objets B à A mais filtrés avec c == Null

0

Si votre problème est que les A qui n'ont pas B sont à venir, pouvez-vous essayer

A.objects.filter(b__isnull=False, b__c__isnull=True).distinct() 
0

Vous devez faire ici une recherche inversée premier

b_with_c_null = b.objects.filter(c__is_null=True).all() 
a_with_any_b_with_c_null = b_with_c_null.a_set.all()