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.
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! –