2016-06-16 12 views
0

In meiner Django-App (1.8) habe ich ein Modell TeamMember, das ein boolesches Feld primary_contact und eine Fremdschlüsselbeziehung zu User hat. Ich möchte den Satz von Benutzerobjekten finden, die keine TeamMember mit primary_contact=True betreffen. (TeamMembers mit primary_contact=False sind fein)Annotate queryset mit Anzahl der gefilterten verwandten Objekte

ich die Anzahl der Teammitglieder leicht genug bekommen können:

User.objects.annotate(teammember__count=Count('teammember')) 

Und ich kann leicht genug primary_contact Mitglieder Prefetch auch:

User.objects.prefetch_related(Prefetch('teammember_set', queryset=.objects.filter(primary_contact=True), to_attr='primary_contacts')) 

Aber ich Ich habe die Beschwörungsformel nicht gefunden, die es mir erlaubt, einen Suchanfragensatz nach "Benutzer, die keine primären_Kontakt-Teammitglieder haben" zu filtern.

Offensichtlich möchte ich dies im ORM tun, Abfragen minimieren und wenn möglich, ohne rohe SQL.

Antwort

1

Ich könnte Ihre Frage missverstanden, aber würde das funktionieren?

User.objects.filter(Q(teammember__primary_contact=False) | 
        Q(teammember__isnull=True)) 
+0

Interessant, es kam mir nicht in den Sinn, dass djangos Orm diese Art von Abfrage erlauben würde. Das war nicht genau das was ich suchte, aber es brachte mich viel näher. 'User.objects.exclude (Q (teammember__primary_contact = True))') sieht vielversprechend aus. Vielen Dank! –