Ich habe zwei Modelle Property
y Image
, die durch einen Fremdschlüssel verbunden sind, so dass jeder Property
hat mehrere Instanzen von Image
. Ich versuche, einen Abfragesatz aller Eigenschaften abzurufen - mit Auflistung aller Felder - und der Anzahl der Bilder, die jede Eigenschaft hat. Ich bin mir bewusst, dass ich dies als zwei verschiedene Abfragen tun könnte, aber ich habe nicht das Gefühl, dass dies ein besonders eleganter Ansatz ist, und erweist sich als ein wenig ineffizient, da diese Informationen über XMLHttpRequest abgerufen werden.
Die Modelle sind wie folgt definiert:
class Property(models.Model):
title = models.CharField('title', max_length=255)
created = models.DateTimeField('created', auto_now_add=True)
modified = models.DateTimeField('modified', auto_now=True)
class Meta:
pass
class Image(models.Model):
prop_id = models.ForeignKey(Property)
image_file = models.ImageField('image file', upload_to='/path/to/image/')
class Meta:
pass
Ich habe die hier veröffentlichte Antwort befolgt: Django-Aggregation über die umgekehrte Beziehung da ich glaube, dass dies ein ähnliches Problem war, aber ich habe festgestellt, dass dies ein leeres Queryset zurückgibt.
Vielen Dank für jede Hilfe, die jemand anbieten kann.
EDIT :
Die Abfrage, die ich durchgeführt habe, lautete:
Property.objects.all().annotate(image_count=Count('image')).order_by('-image_count')
EDIT 2:
Nach einigen Experimenten habe ich eine Lösung gefunden, obwohl ich mir ziemlich sicher bin, dass dies als Fehler / nicht dokumentiertes Problem einzustufen ist:
Property.objects.all().annotate(Count('image')).order_by('-image__count')
Property.objects.all().annotate(total_images=Count('image')).order_by('-total_images')
Beides funktioniert, aber die Benennung der Bemerkung image_count
nicht. Ohne einen Blick in den Django-Quellcode zu werfen, kann ich nicht wirklich darüber spekulieren, warum das so ist.