2014-07-07 42 views
0

我想要获得所有购买的总和以显示在我的管理员中,以便我可以根据所花费的金额查看收据。这是我的应用程序。我删除了我已经试过的东西,只是粘贴了已经有效的东西。我如何总计Django中所有价格的总和admin

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) 

对于收据中我希望能够显示在admin /收益指数的采购总量每增加购买量。

所以

Receipt 1 
purchase 1 = 100.00 
purchase 2 = 200.00 

在保存该收据并返回到收货指数我希望能够查看每个收到的总量。这样收到1将显示“收据号码”,“店” ......共(300.00)

+0

那么,你需要什么帮助?我没有看到自己试图解决它,所以你需要帮忙计算总数,或者在管理列表视图中显示它? –

+0

@ user3811134你在'fieldsets'和'RECEIPT_TYPE_CHOICES'中有额外的逗号。 –

回答

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' 

这将工作。

+0

谢谢,它工作完美。我在谷歌搜索几个小时后尝试了类似的方式,但似乎没有任何工作。再次谢谢你! – user3811134

+0

高兴地帮助:) – arulmr