To retrieve maximum, minimum or average values from group of rows we can use django Aggregation. For example to retrieve max price or avg price of product from catalogue.
Django queries help to create, retrieve, update and delete objects. But sometimes we need to get summered values from the objects. Then a Simple solution is to use Django aggregate feature Here are simple examples of how to use aggregation.
app/models.py
class company(models.Model):
name=models.CharField(max_length=20)
est=models.IntegerField(max_length=4)
class feature(models.Model):
name=models.CharField(max_length=20)
class device(models.Model):
name=models.CharField(max_length=20)
Code=models.IntegerField()
Company=models.ForeignKey(company)
features=models.ManyToManyField(feature)
To perform Min Max and Avg on specific column
>>> from django.db.models import Avg, Max, Min, Sum
>>> device.objects.all().aggregate(Avg('price'))
{'price__avg': 12234.0}
>>> device.objects.all().aggregate(Max('price'))
{'price__max':587961 }
>>> device.objects.all().aggregate(Min('price'))
{'price__min': 01245}
To know the children count of a foreign key field.
>>> Comp_Devices=company.objects.annotate(no_of_devices=Count('device'))
>>> Comp_Devices[0].no_of_devices
36
>>> Comp_Devices[0].name
u'Micro'
>>> Comp_Devices[1].no_of_devices
1
the same procedure can be followed for ManyToMany field Columns
>>> Dev_features_count = device.objects.annotate(num=Count('features'))
>>> Dev_features_count[0].num
3
>>> Dev_features_count[1].num
2
>>>
You can perform some complex queries like
To know the devices which have more than two features
>>> Dev_features= device.objects.annotate(num=Count('features')).filter(num__gt=2)
>>> Dev_features[0].num
3
>>>
To Know more about our Django CRM(Customer Relationship Management) Open Source Package. Check Code