Parsa Rezaei
Parsa Rezaei
خواندن ۲ دقیقه·۷ ماه پیش

Aggregation in Django

سلام، امیدوارم که حالتون خوب باشه.

موضوعی که قرار هست راجبش صحبت کنم یکی از مسائل در کوئری جنگو هستش..Aggregation.

چون قرار هست که طبق داکیومنت پیش بریم پس از خود مثال داکیومنت جلو میرم:

خب، فرض کنید که شما میخواید میانگین کل قیمت کتاب هارو حساب کنید...چون برای حساب کل QuerySet قرار هست محاسبه صورت بگیره، Aggregate به کمکتون میاد.

>>> from django.db.models import Avg >>> Book.objects.aggregate(Avg(&quotprice&quot)) {'price__avg': 34.35}

نکته قابل توجه این هستش که خروجی aggregate به صورت دیکشنری هستش و key از ترکیب نام فیلد شما که مثلا price هستش به همراه نام متد تشکیل میشه. اگر بخواید نام به خصوص براش مشخص کنید میتونین به صورت کد زیر این کار رو انجام بدید:

Book.objects.aggregate(average_price=Avg(&quotprice&quot))



راه دوم برای محاسبه و کار روی annotate, object نام داره. حالا چه زمانی از annotate استفاده میکنیم؟ زمانی که بخوایم روی یک کوئری خاص کار کنیم بر خلاف aggregate که روی یک عالمه نتیجه متمرکز میشیم.

به طور مثال، فرض کنید که حالا که لیست کتاب هارو دارید، میخواید بدونید که هر کدوم از کتاب ها، تعداد نویسنده هاش که مشارکت داشتن رو حساب کنید:

# Build an annotated queryset >>> from django.db.models import Count >>> q = Book.objects.annotate(Count(&quotauthors&quot)) # Interrogate the first object in the queryset >>> q[0] <Book: The Definitive Guide to Django> >>> q[0].authors__count 2 # Interrogate the second object in the queryset >>> q[1] <Book: Practical Django Projects> >>> q[1].authors__count 1

همونطور که میبینید، خروجی ما به صورت QuerySet هستش و مثل aggregate، به صورت دیفالت شما باید از نام فیلد و نام متد استفاده بکنین تا خروجی بگیرید. اگر بخواید میتونین نام رو خودتون مشخص بکنید:

>>> q = Book.objects.annotate(num_authors=Count(&quotauthors&quot)) >>> q[0].num_authors 2 >>> q[1].num_authors 1

به طور خلاصه تعریف این دو رو به بخوام داخل جدول قرار بدیم میشه(ممنون از AI):



این یک توضیح کوچیک از تعریف این دو روش برای کار روی object هامون بودش که خب جزئیات زیادی بابتشون هستش که نیاز هست حتما داکیومنت رو با دقت بخونین؛)

امیدوارم که براتون مفید بوده باشه.

لینک داکیومنت این بخش:

https://docs.djangoproject.com/en/5.0/topics/db/aggregation/

aggregationannotationdjangoqueryset
یه برنامه نویس ساده که جنگو کار میکنه و جدیدا هم تصمیم گرفته راه دواپس رو پیش ببره:)
شاید از این پست‌ها خوشتان بیاید