您在正确的轨道上,除了list_display
仅适用于列出所有发票的页面,在编辑特定发票时您不会看到
要在编辑特定发票时查看它,我认为您需要覆盖该change_view
方法,该方法称为视图函数:
https://docs.djangoproject.com/en/1.7/ref/contrib/admin/#django.contrib。 admin.ModelAdmin.change_view
像这样的东西:
class InvoiceAdmin(admin.ModelAdmin):
inlines = [InvoiceItemInline]
list_display = ('description', 'date', 'status', 'invoice_amount')
# You need to customise the template to make use of the new context var
change_form_template = 'admin/myapp/extras/mymodelname_change_form.html'
def _invoice_amount(self, invoice_id):
# define our own method to serve both cases
order_values = InvoiceItem.objects.filter(invoice__id=invoice_id).values_list(
'price', 'quantity', flat=True)
return reduce(
lambda total, (price, qty): total + (price * qty),
order_values,
0
)
def invoice_amount(self, instance):
# provides order totals for invoices list view
return self._invoice_amount(instance.pk)
def change_view(self, request, object_id, form_url='', extra_context=None):
# provides order total on invoice change view
extra_context = extra_context or {}
extra_context['order_total'] = self._invoice_amount(object_id)
return super(MyModelAdmin, self).change_view(request, object_id,
form_url, extra_context=extra_context)
请注意,您也需要覆盖更改表单模板以使用order_total
我们发送回的变量extra_context