2

これが可能かどうかはわかりませんが、Django Admin のカート(モデル クラス) 詳細ビューで、すべての TabularInline Entryモデル クラスの小計を合計し、その値をカートの total_price属性に保存したいと考えています。これを行う方法や、フィルターまたはフォーム ウィジェットを使用して同じ目的ですべての小計を追加する方法はありますか? 助けてくれてありがとう!

以下は、私がやりたいことの例です。手動で 130 を入力した合計金額フィールドを見ることができます (小計: 90 + 20 + 20 = 130)。在庫からエントリが追加され、その数量が編集されるたびに、これが自動的に計算されるようにしたいと考えています。

ここに画像の説明を入力

これまでのところ、私の admin.py には、数量にそれぞれの価格を掛けて各エントリの小計を返す TabularInline 管理クラスがあります。次に、私の CartAdmin クラスは、カート モデルの詳細ビュー内にそのインライン関係を表示します。

admin.py

class EntryInline(admin.TabularInline):
    model = Entry
    extra = 0
    readonly_fields = ['subtotal']
    exclude = ['price']
    def subtotal(self, obj):
        return "$" + str(obj.quantity * obj.inventory.price)


class CartAdmin(admin.ModelAdmin):
    inlines = [EntryInline]
    fieldsets = (
        (None, {
            'fields':('user', 'total_price')
            }),
    )

models.py

class Inventory(models.Model):
    quantity        = models.IntegerField()
    price           = models.DecimalField(max_digits=5, decimal_places=2)


class Cart(models.Model):
    user            = models.OneToOneField(User)
    total_price     = models.DecimalField(max_digits=4, decimal_places=2, blank=True, null=True)


class Entry(models.Model):
    cart            = models.ForeignKey(Cart, related_name="entries")
    inventory       = models.ForeignKey(Inventory, related_name="entries")
    quantity        = models.PositiveSmallIntegerField(default=1)
    price           = models.DecimalField(max_digits=4, decimal_places=2, blank=True, null=True)
4

3 に答える 3