Sagen wir, ich habe folgende vereinfachtes Modell:Beschriften Anzahl identischer Artikel im Manager
class CurrentInvoices(models.Manager):
def get_queryset(self):
qs = super(CurrentInvoices, self).get_queryset()
current_invoices = qs.order_by('person', '-created_on').distinct('person').values('pk')
return qs.annotate(invoice_count=models.Count('number')).filter(id__in=current_invoices).order_by('person__last_name')
class Invoice(models.Model):
created_on = models.DateField()
person = models.ForeignKey(Person)
total_amount = models.DecimalField()
number = models.PositiveSmallIntegerField()
objects = models.Manager()
current_invoices = CurrentEDCInvoices()
Eine Person, die ein Invoice
mit dem gleichen number
haben aus irgendeinem Grund, wenn die zuvor generierten Rechnung falsch war. Die letzte (höchste created_on
) zählt.
Der Trick mit .filter(id__in)
im Manager wird benötigt, um die Ergebnisse von s Nachname zu erhalten; Dies kann nicht entfernt werden.
Jetzt möchte ich die Gesamtzahl von number
kommentieren. Mein Versuch annotate(invoice_count=models.Count('number'))
gibt immer 1
zurück, obwohl es mehrere gibt.
Was mache ich falsch? Irgendwelche Hinweise darauf, wie man das richtig erreicht, ohne zu viel zu hacken und , ohne die DB für jede Rechnung zu treffen?
Aber alle Rechnungen mit der gleichen Anzahl an demselben Patienten verbunden? – SaeX
Wenn Sie Rechnungsduplikate ausschließen müssen, sollten Sie durch 'pk' unterscheiden – atn
Hmm, ich möchte nach Person unterscheiden, da ich" eine Zeile "pro Person haben möchte. Auch macht distinct by pk keinen Sinn, da pk einzigartig ist? – SaeX