/ / Uzyskaj sumę atrybutu klucza obcego za pomocą django - django, django-queryset

Uzyskaj sumę atrybutu klucza obcego za pomocą django - django, django-queryset

class sales_line(models.Model):
sales_id = models.CharField(max_length=200)
item = models.CharField(max_length=200)
qty =   models.IntegerField()

def __unicode__(self):
return self.sales_id


class Loss(models.Models):
sale_id = models.ForeignKey(sales_line)

skąd mam wiedzieć, ile straciłem ilości jeśli parametr sales_id znajduje się w tabeli strat, sprzedaż zostaje utracona

Odpowiedzi:

2 dla odpowiedzi № 1

Musisz użyć Sum od agregaty:

from django.db.models import Sum
lost_sales_id = Loss.objects.all().values_list("sale_id__sales_id", flat=True)
total = sales_line.objects.filter(sales_id__in=lost_sales_id).annotate(Sum("qty"))

Naprawdę musisz zoptymalizować swoje modele:

class SalesLine(models.Model):
sales_id = models.CharField(max_length=200)
item = models.CharField(max_length=200)
qty = models.IntegerField()

def __unicode__(self):
return unicode(self.sales_id)

class Loss(models.Model):
sale = models.ForeignKey(SalesLine)

Teraz możesz to zrobić:

lost_sales_id = Loss.objects.all().values_list("sale__pk", flat=True)
SalesLine.objects.filter(pk__in=lost_sales_id).annotate(Sum("qty"))