Django
मॉडल एकत्रीकरण
खोज…
परिचय
एकत्रीकरण एक मॉडल से प्राप्त वस्तुओं की पंक्तियों पर (व्यक्तिगत और / या) समूहों के संचालन की अनुमति देने वाली विधियां हैं।
औसत, न्यूनतम, अधिकतम, क्वेरी से योग
class Product(models.Model):
name = models.CharField(max_length=20)
price = models.FloatField()
सभी उत्पादों की औसत कीमत पाने के लिए:
>>> from django.db.models import Avg, Max, Min, Sum
>>> Product.objects.all().aggregate(Avg('price'))
# {'price__avg': 124.0}
सभी उत्पादों की न्यूनतम कीमत पाने के लिए:
>>> Product.objects.all().aggregate(Min('price'))
# {'price__min': 9}
सभी उत्पादों की अधिकतम कीमत पाने के लिए:
>>> Product.objects.all().aggregate(Max('price'))
# {'price__max':599 }
सभी उत्पादों की कीमतों का SUM पाने के लिए:
>>> Product.objects.all().aggregate(Sum('price'))
# {'price__sum':92456 }
विदेशी संबंधों की संख्या की गणना करें
class Category(models.Model):
name = models.CharField(max_length=20)
class Product(models.Model):
name = models.CharField(max_length=64)
category = models.ForeignKey(Category, on_delete=models.PROTECT)
प्रत्येक श्रेणी के लिए नंबर उत्पाद प्राप्त करने के लिए:
>>> categories = Category.objects.annotate(Count('product'))
यह <field_name>__count
विशेषता को प्रत्येक उदाहरण में लौटाता है:
>>> categories.values_list('name', 'product__count')
[('Clothing', 42), ('Footwear', 12), ...]
आप कीवर्ड तर्क का उपयोग करके अपनी विशेषता के लिए एक कस्टम नाम प्रदान कर सकते हैं:
>>> categories = Category.objects.annotate(num_products=Count('product'))
आप क्वेरी में एनोटेट फ़ील्ड का उपयोग कर सकते हैं:
>>> categories.order_by('num_products')
[<Category: Footwear>, <Category: Clothing>]
>>> categories.filter(num_products__gt=20)
[<Category: Clothing>]
GROUB BY ... COUNT / SUM Django ORM समतुल्य
हम एक GROUP BY ... COUNT
या एक GROUP BY ... SUM
प्रदर्शन कर सकते हैं GROUP BY ... COUNT
annotate()
, values()
, django.db.models
order_by()
और django.db.models
की Count
के उपयोग के साथ Django ORM पर GROUP BY ... SUM
SQL समतुल्य प्रश्न और Sum
तरीके सम्मानपूर्वक:
हमारे मॉडल होने दें:
class Books(models.Model):
title = models.CharField()
author = models.CharField()
price = models.FloatField()
GROUP BY ... COUNT
:
मान लें कि हम गिनना चाहते हैं कि हमारी
Books
तालिका में प्रति लेखक की कितनी पुस्तक वस्तुएँ मौजूद हैं:result = Books.objects.values('author') .order_by('author') .annotate(count=Count('author'))
अब
result
में दो कॉलम के साथ एक क्वेरीसेट शामिल है:author
औरcount
:author | count ------------|------- OneAuthor | 5 OtherAuthor | 2 ... | ...
GROUB BY ... SUM
:
मान लें कि हम अपनी
Books
तालिका में मौजूद प्रत्येक लेखक की सभी पुस्तकों की कीमत का योग करना चाहते हैं:result = Books.objects.values('author') .order_by('author') .annotate(total_price=Sum('price'))
अब
result
में दो कॉलम के साथ एकtotal_price
:author
औरtotal_price
:author | total_price ------------|------------- OneAuthor | 100.35 OtherAuthor | 50.00 ... | ...