如何在Django admin中计算所有价格的总和

0 投票
1 回答
2217 浏览
提问于 2025-04-18 12:18

我想在我的管理后台显示所有购买的总金额,这样我就可以根据花费的金额查看收据。这是我的应用程序。我把之前尝试过的内容删掉了,只保留了现在能用的部分。

class Store(models.Model):

    store_name = models.CharField(max_length = 255)
    store_number = models.IntegerField()

    address_1 = models.CharField(_("address"), max_length = 128)
    address_2 = models.CharField(_("address cont'd"), max_length = 128, blank = True)

    city = models.CharField(_("city"), max_length = 64, default = "Enter City")
    state = USStateField(_("state"), default = "AB")
    zip_code = models.CharField(_("zip code"), max_length = 5, default = "Enter Zip")


    def __unicode__(self):
        return self.store_name

class Receipt(models.Model):
    store = models.ForeignKey(Store)
    receipt_number = models.IntegerField()
    transaction_date = models.DateTimeField()

    BUSINESS = "BS"
    PERSONAL = "PS"
    RECEIPT_TYPE_CHOICES = (
        (PERSONAL, 'Personal'),
        (BUSINESS, 'Business'),
    )
    receipt_type = models.CharField(max_length=2,
                                    choices = RECEIPT_TYPE_CHOICES,
                                    default = PERSONAL)

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

class Purchase(models.Model):
    receipt = models.ForeignKey(Receipt)
    item_name = models.CharField(max_length = 255)
    price = models.DecimalField('Amount', max_digits = 5, decimal_places = 2 )

    def __unicode__(self):
        return self.item_name

这是我的管理后台

from django.contrib import admin
from django.db.models import Sum
from receipts.models import *

class PurchaseInline(admin.TabularInline):
    model = Purchase
    extra = 3

class ReceiptAdmin(admin.ModelAdmin):
    fieldsets = [
        ('Store',   {'fields': ['store']}),
        ('Receipt',         {'fields':['receipt_number', 'receipt_type']}),
        ('Transaction Date',    {'fields': ['transaction_date']}),

    ]

    inlines = [PurchaseInline]  
    list_display = ('store', 'transaction_date', 'receipt_number', 'receipt_type')
    list_filter = ['store']



class StoreAdmin(admin.ModelAdmin):
    list_display = ('store_name', 'city', 'state', 'store_number')

admin.site.register(Store, StoreAdmin)
admin.site.register(Receipt, ReceiptAdmin)

每次在收据中添加购买金额时,我希望能在管理后台的收据列表中显示所有购买的总金额。

也就是说,

Receipt 1
purchase 1 = 100.00
purchase 2 = 200.00

在保存收据后,返回收据列表时,我希望能看到每个收据的总金额。比如收据1会显示“收据编号”“商店”……总计(300.00)

1 个回答

0

在你的 ReceiptAdmin 里定义一个函数,像下面这样,然后把这个函数的名字加到你的管理字段列表里:

class ReceiptAdmin(admin.ModelAdmin):
    ....
    ('Receipt', {'fields':['receipt_number', 'receipt_type', 'receipt_amount']}),
    ....

    def receipt_amount(self, request):
        current_receipt_purchase_amounts = Purchase.objects.filter(receipt__id = request.id).values_list('price', flat = True)
        total_amount = sum(current_receipt_purchase_amounts)
        return total_amount
    receipt_amount.short_description = 'Receipt Amount'

这样就可以用了。

撰写回答