Frage

Ich habe ein Modell Artikel, mit m2m Bezug auf Benutzer ( "Eigentümer") genannt wird.

Für jedes Element muss ich Benutzer zählen, die sie besitzen. Das ist leicht genug, um mit Anmerkungen versehen ()

Aber dann muß ich Verhältnis zwischen Eigentümern von bestimmtem Geschlecht und Gesamt Eigentümer Anzahl für jedes Element zu berechnen. Zum Beispiel, wenn zwei Männer besitzen die Artikel von 5 Benutzern, das Verhältnis beträgt 0,4.

Was ist der beste Weg, das zu tun?

War es hilfreich?

Lösung

das mit dem ORM zu tun, müssen Sie bedingte Aggregate, die in Django nicht unterstützt werden. http://www.voteruniverse.com/Members/jlantz/ Blog / bedingte-Aggregate-in-django eine hacky Lösung schlägt die funktionieren könnte.

Wenn Sie nicht durch das Verhältnis sortieren müssen, dann können Sie zwei Anrufe zu annotieren und dann das Verhältnis in Python zu berechnen. So etwas wie:

items = Item.objects.annotate(ucount=Count('users')).annotate(ccount=CountIf(<condition>))
for item in items:
    item.ratio = item.ucount / item.ccount

Wenn Sie das nicht tun wollen, würde ich empfehlen, die extra () Methode verwendet und einige benutzerdefinierte SQL die zusätzliche Informationen, die Sie erhalten möchten. Dokumentation für diese Methode ist auf der Django Queryset API-Dokumentation Seite.

Andere Tipps

Nur oben auf dem Kopf, so etwas wie die folgenden funktionieren könnte. Iterate auf sie Ihre perfekte Lösung zu erhalten, wenn Sie wollen:

items = Item.objects.annotate(Count('users'))

for item in items:
    total = item.users__count
    num_males = item.users.filter(gender='M').count()
    num_females = item.users.filter(gender='F').count()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top