save_related が呼び出されたときに、インライン フォームセットのすべてのフォームから 2 つのフィールドにアクセスする必要があり、save_related を使用すると、変更されたフォーム/データのみにアクセスできます。
私の問題に対する他の解決策はありますので、ここにあります:
class Invoice(models.Model):
invoice = models.CharField(max_length=10, blank=True, null=True, unique=True)
total = models.PositiveIntegerField(blank=True, null=True)
class InvoiceItem(models.Model):
invoice = models.ForeignKey(Invoice, related_name='items')
service = models.ForeignKey(Service)
quantity = models.PositiveIntegerField(blank=False, default=1)
price = models.PositiveIntegerField(blank=False, default=0)
class InvoiceItemInline(admin.TabularInline):
model = InvoiceItem
class InvoiceAdmin(admin.ModelAdmin):
inlines = [InvoiceItemInline]
def save_related(self, request, form, formsets, change):
invoice = form.instance
invoice.total = 0
for inlines in formsets:
for inline_form in inlines:
invoice.total = invoice.total + inline_form.cleaned_data['price'] * inline_form.cleaned_data['quantity']
invoice.save()
super(InvoiceAdmin, self).save_related(request, form, formsets, change)
各請求項目の請求合計を計算する必要があります。各項目には数量 * 価格があります。