Django: Verwenden von Annotate, Count und Distinct in einem Queryset

9

Hier ist meine Datenbankabfrage:

%Vor%

Die Abfrage gliedert sich wie folgt auf (wie ich es verstehe):

  • Der erste Filter ist der aktuelle Anhang, der "aktuell" ist.
  • Dann, um die Anzahl dieser Anhänge mit einer bestimmten 'article_id' zu zählen.
  • Dann, um jedes Attachment mit der Nummer des Attachments mit der Anzahl derer zu kommentieren, die article_id gemeinsam haben.
  • Dann basierend auf der Anzahl der Anhänge zu ranken.
  • Schließe dann die Liste mit distinct ab, so dass es für jeden article_id-Wert ein Attachment-Objekt gibt.

Ich führe dies auf PostgreSQL durch, also nach den Django Dokumenten , ich ' Es ist gut, distinct () basierend auf einem Feld zu laufen.

Es gibt keinen Fehler beim Ausführen der Abfrage, aber wenn ich versuche, die Ergebnisse zu iterieren oder sogar zu drucken, wird der folgende Fehler von Django debug ausgelöst:

%Vor%

Die ausführlichere Rückverfolgung von der interaktiven Eingabeaufforderung ist:

%Vor%

Weiß jemand, was hier vor sich geht?

    
Pat 06.08.2012, 15:42
quelle

1 Antwort

5

Die Problemumgehung besteht darin, values('distinct_fieldname') zu verwenden, da dies dazu führt, dass die letzte SQL-Anweisung GROUP BY für dieses Feld ausführt (Sie können mehr als einen Feldnamen hinzufügen), was im Wesentlichen derselbe ist.

Wenn Sie beispielsweise wissen möchten, wie viele Artikel für ein bestimmtes 'filename' existieren, würden Sie dies tun:

%Vor%     
benjaoming 17.02.2014 16:10
quelle

Tags und Links