2016-04-23 3 views
0

Ich habe eine Haupttabelle, die einen Fremdschlüssel an seine Kindtabelle übergibt. Ich möchte eine Liste aller Elemente aus der Haupttabelle mit der Summe der Spalten anzeigen, die aus der untergeordneten Tabelle stammen.Django: Summe der Spalten der Kindtabelle mit eindeutigem Schlüssel, übergeben von Haupttabelle

Wie es in Django Queryset zu tun? Bitte helfen Sie.

Models.py

class serviceinvoice(models.Model): 
    user=models.ForeignKey(settings.AUTH_USER_MODEL,related_name='invoice')  
    invoice_number=models.PositiveIntegerField() 
    #invoice_no = models.CharField(max_length = 500, default = increment_invoice_number, null = True, blank = True) 
    invoice_date = models.DateField() 
    invoice_receivable=models.ForeignKey(Receivables,null=True) 
    #total_amount=models.DecimalField(decimal_places=2,max_digits=20) 
    #total_amountwithtax=models.FloatField() 
    company_det=models.ForeignKey(Company,related_name='companydetails') 


    class Meta: 
     unique_together = (("user", "invoice_number"),) 
     ordering=('-invoice_number',) 

    def __str__(self): 
     return self.invoice_number 

    def get_absolute_url(self): 
     return reverse('invoice:editinvoice', args=[self.invoice_number]) 

class serviceinvoiceitems(models.Model): 
    user=models.ForeignKey(settings.AUTH_USER_MODEL,related_name='serviceinvoiceitem') 
    invoice_number=models.ForeignKey(serviceinvoice,related_name='serviceitems1') 
    Product=models.CharField(max_length=1000) 
    UOM=models.CharField(max_length=100) 
    Quantity=models.FloatField() 
    Rate=models.FloatField() 
    Tax_rate=models.FloatField() 
    Total_sale=models.FloatField() 
    Sales_tax=models.FloatField() 
    Total_billamount=models.FloatField() 

    def __str__(self): 
     return self.invoice_number 

views.py

@login_required 
def inv_list(request): 
    invoice_list=serviceinvoice.objects.filter(user=request.user) 
    totallist=serviceinvoice.objects.annotate(sum_list=Sum('serviceitems1__Total_sale')) 
    return render(request,'account/invoicelist.html',{'invoice_list':invoice_list,'totallist':totallist}) 

Bisher in Aussicht ich in der Lage bin für einen Benutzer Liste der Rechnungen zu filtern, aber wie kann ich total bekommen jeder Rechnung aus dem Teilmodell ie serviceinvoice items.

Versucht etwas und übergibt {{ totallist.sum_list }} in Vorlage, aber zeigt nichts.

+0

Sie müssen mehr Details anzeigen. Wie sehen die Modelle aus? Was hast du bisher? –

+0

@DanielRoseman aktualisierte Frage. –

Antwort

0

Anmerkung und Aggregation in Django kann eine Art Twitchy sein. Versuchen Sie, eine manage.py shell zu öffnen und spielen Sie mit Ihrem Queryset serviceinvoice.objects.all().annotate(sum_list=Sum(...) und werfen Sie einen Blick auf ein paar der Ergebnisse daraus, um zu überprüfen, dass es zurückgibt, was Sie erwarten. Dadurch werden alle möglichen Probleme von Vorlagen und Ansichten ausgeschlossen, die nicht Ihren Erwartungen entsprechen.

Wenn diese seltsame Ergebnisse ist zu geben, einen Blick auf https://docs.djangoproject.com/en/1.9/topics/db/aggregation/#values ein .values() Putting, bevor ein annotate die GROUP BY ändert, dass die ORM erzeugt, die in der Regel die Ursache der Probleme für die Menschen ist.

Verwandte Themen