0

私は2つのモデルを持っています:

class Tickets(models.Model):
   ticketnumber = models.IntegerField()
   total_amount = models.DecimalField()

class TicketItems(models.Model):
   name = models.Charfield(max_length=30)
   ticket = models.ForeignKey(Tickets)
   price = models.DecimalField()
   amount = models.IntergerField()

ユーザーがチケットアイテムを追加できるインライン管理ページがあります。保存時にすべての TicketItems からモデル チケットの total_mount を更新するにはどうすればよいですか (価格 * 金額)?

Django のドキュメントでは、これを admin.py に追加するように指示されています。

class TicketAdmin(admin.ModelAdmin):
    def save_formset(self, request, form, formset, change):
        instances = formset.save(commit=False)
        for instance in instances:
            instance.user = request.user
            instance.save()
        formset.save_m2m()

私は多くのことを試しましたが、合計金額を更新できません.ここに私のadmin.pyがあります:

class TicketitemsInline(admin.TabularInline):
    model = Ticketitems

class TicketsAdmin(admin.ModelAdmin):
    inlines = [
        TicketitemsInline,
    ]

    def save_formset(self, request, form, formset, change):
        instances = formset.save(commit=False)
        for instance in instances:
            instance.user = request.user
            instance.save()
            instance.update_total_amount()
        formset.save_m2m()
admin.site.register(Tickets, TicketsAdmin)
4

1 に答える 1

1

この質問は、Django メーリング リストで Pankaj Singh によって回答されました。

解決策は次のとおりです。次のコードをテストしましたが、動作します。

models.py
from django.db import models

class Ticket(models.Model):
    ticketnumber = models.IntegerField()
    total_amount = models.DecimalField(max_digits=7, decimal_places=2,
blank=True)

    def update_total_amount(self):
        total = 0
        for ti in self.ticketitem_set.all():
            total += ti.price * ti.amount
        self.total_amount = total
        self.save()

class TicketItem(models.Model):
    name = models.CharField(max_length=30)
    ticket = models.ForeignKey(Ticket)
    price = models.DecimalField(max_digits=7, decimal_places=2)
    amount = models.IntegerField()


#### admin.py
from django.contrib import admin
from tickets.models import Ticket, TicketItem


class TicketItemInline(admin.TabularInline):
    model = TicketItem

class TicketAdmin(admin.ModelAdmin):
    inlines = [TicketItemInline,]

    def save_formset(self, request, form, formset, change):
        instances = formset.save(commit=False)
        for instance in instances:
            instance.save()
        formset.save_m2m()
        instance.ticket.update_total_amount()


admin.site.register(Ticket, TicketAdmin)
于 2013-02-05T07:11:07.727 に答える