2016-08-01 4 views
0

Es gibt mehrere Control mit DeviceSet verbunden, aber nur eine Kontrolle, die von DeviceSet aktiviert ist. Ich möchte die aktive Steuerung des DeviceSet erhalten, wenn ich das Abfrage-Set in einer Spalte _control bekomme. Ich versuche schon:Suchen nach ForeignKey aktiv und zum QuerySet hinzufügen

DeviceSet.objects.annotate(_control = Q(control__active=True)) 

Das ist nicht

'WhereNode' object has no attribute 'output_field' 

Und nach Satz funktionieren output_field = Steuer Ich habe die folgende Ausnahme:

type object 'Control' has no attribute 'resolve_expression' 

Ich möchte nur wie eine haben prefetch_related mit Filter, aber in einer neuen Spalte, um das Attribut _control in der Methode des Modells zu verwenden.

Antwort

0

Sie erhalten Fehler aus, was Sie versucht haben, weil annotate Verfahren eine Aggregatfunktion benötigt (zB Sum, Count etc) eher als ein Q Objekt.

Da Django 1.7 es möglich ist, zu tun, was Sie wollen prefetch_related finden Sie unter docs hier: https://docs.djangoproject.com/en/1.8/ref/models/querysets/#django.db.models.Prefetch

DeviceSet.objects.prefetch_related(
    Prefetch('control_set', 
      queryset=Control.objects.filter(active=True), 
      to_attr='_control') 
) 
Verwandte Themen