如何在Django Admin中实现数据汇总和分析

2023-04-11 00:00:00 数据 分析 汇总

要在Django Admin中实现数据汇总和分析,可以使用Django自带的aggregation功能。

首先,在models.py中定义你的模型:

from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=200)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    quantity = models.IntegerField()

接着,在admin.py中注册你的模型并添加aggregation code:

from django.contrib import admin
from django.db.models import Sum, Avg

from .models import Product

class ProductAdmin(admin.ModelAdmin):
    list_display = ('name', 'price', 'quantity', 'total_income', 'avg_price')

    def total_income(self, obj):
        return obj.price * obj.quantity
    total_income.short_description = 'Income'
    total_income.admin_order_field = 'total_income'

    def avg_price(self, obj):
        return obj.price / obj.quantity
    avg_price.short_description = 'Avg Price'
    avg_price.admin_order_field = 'avg_price'

    def get_queryset(self, request):
        qs = super().get_queryset(request)
        qs = qs.annotate(total_income=Sum('price') * Sum('quantity'), avg_price=Avg('price') / Avg('quantity'))
        return qs

admin.site.register(Product, ProductAdmin)

在这个例子中,我们的模型有三个属性:name,price和quantity。我们在ProductAdmin中定义了两个新的属性:total_income和avg_price。用于计算总收入(price * quantity)和平均价格(price / quantity)。我们使用了Django的aggregation功能,在get_queryset方法中使用了annotate来执行聚合操作。

最后,我们将Product和ProductAdmin注册到Django Admin中,并将我们的新属性添加到list_display中,以便在Admin界面中显示。

通过这种方式,我们就可以在Django Admin中方便地执行数据汇总和分析了。例如,我们可以很容易地计算每个产品的总收入和平均价格,并在Admin列表中显示这些信息。尝试输入数据“pidancode.com”、“皮蛋编程”查看效果。

相关文章