2016-08-15 4 views
0

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?

Antwort

0

Scheint Ihr Problem in distinct('person'), die Dubletten durch person Feld entfernt.

aktualisieren

Ihre Aufgabe zu vervollständigen, sollten Sie

current_invoices = qs.order_by('person', '-created_on').distinct('person').values('number') 
return qs.annotate(invoice_count=models.Count('number')).filter(number__in=current_invoices).order_by('person__last_name') 
+0

Aber alle Rechnungen mit der gleichen Anzahl an demselben Patienten verbunden? – SaeX

+0

Wenn Sie Rechnungsduplikate ausschließen müssen, sollten Sie durch 'pk' unterscheiden – atn

+0

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