Angenommen, es eine Struktur ist wie folgt:Django mit Anmerkungen versehen queryset auf einem bestimmten Wert des relationalen Modells Attribut
PARTICIPATION_STATUSES = (
(0, 'No, thanks'),
(1, 'I may attend'),
(2, 'I\'ll be there'),
)
class Model1(models.Model):
# ...
class Model2(models.Model):
status = models.PositiveIntegerField(
_('participation status'), choices=PARTICIPATION_STATUSES)
field = models.ForeignKey(Model1, related_name='model1_participation')
Was ich tun möchte, ist jedes Objekt von Model1
mit der Zählung der Model2
Objekte mit Anmerkungen versehen, wo Status a gleich spezifischer Wert (Statusnummer ist dieses spezielle Beispiel).
In meinem Pseudo-Code würde es wie folgt aussehen:
queryset = Model1.objects.all()
queryset.annotate(declined=Count('model1_participation__status=0'))
queryset.annotate(not_sure=Count('model1_participation__status=1'))
queryset.annotate(accepted=Count('model1_participation__status=2'))
Aber ich kann den queryset auf diese Weise nicht mit Anmerkungen versehen, wie Django nicht status=<n>
lösen.
Was ist der richtige Weg, um zu erreichen, was ich will?
Danke, das sieht wirklich gut aus, aber ich muss Objekte annotieren und nicht aggregieren. Haben Sie Ideen zu Annotationen wie diesen? – pythad
Ich habe die Antwort geändert, es sollte immer noch genauso funktionieren. Probieren Sie es aus und lassen Sie mich wissen, wie es geht! –
Angesichts der Modelle glaube ich nicht, dass "field_set" der richtige Name ist ('_set' wird für Objekte verwendet, d. H. Um die zugehörigen Datensätze einer bestimmten Instanz abzurufen). Verwenden Sie 'When (model2__status == ...' eher – Pynchia