Django admin - 如何根据其他模型字段值计算字段值

时间:2013-11-26 14:53:04

标签: django django-admin

我有这种情况: 维修服务可能包括在机器中维修/安装多个备件。对于服务维修中涉及的每个备件,技术人员可以选择其状态(新的,使用过的,翻新的)。在一个名为PartCostRate的单独表中,我映射了状态的成本百分比:

models.py

class Part(models.Model):
    item_code = models.CharField(max_length=255, primary_key=True)
    name = models.CharField('Part Name', max_length=128)
    exw_price = models.DecimalField(max_digits=12, decimal_places=6)

class PartCostRate(models.Model):
    PART_STATES = (
        ('N', 'New'),
        ('U', 'Used'),
        ('R', 'Refurbished'),
    )
    state = models.CharField(max_length=1, choices=Part_STATES)
    rate = models.DecimalField(max_digits=4, decimal_places=2)

class Service(models.Model):
    service_code = models.CharField(max_length=10)

    parts = models.ManyToManyField(Part, through='ServicePart')

class ServicePart(models.Model):
    PART_STATES = (
        ('N', 'New'),
        ('U', 'Used'),
        ('R', 'Refurbished'),
    )
    service = models.ForeignKey(Service)
    part = models.ForeignKey(Part)
    state = models.CharField(max_length=1, choices=PART_STATE)
    quantity = models.IntegerField()
    cost = models.DecimalField(max_digits=12, decimal_places=6)

admin.py

class ServicePartInline(admin.TabularInline):
    model = ServicePart
    extra = 1
    verbose_name = 'Repaired / Installed Part'

class ServiceAdmin(admin.ModelAdmin):
   inlines = [ServicePartInline,]

从管理界面,我如何根据所选的状态和数量计算零件的成本(来自serviceadmin的内联)。对于Used的选择,我需要查询PartCostRate模型以检查Used的使用率,然后检查该部分的exw_price,然后进行计算而不忘记数量。

我不确定如何从管理员那样做。它是否需要javascript才能在其字段中显示计算的成本。因为有时他们可能会手动更改它。

提前致谢

1 个答案:

答案 0 :(得分:1)

有两种方法可以做到这一点

1)像你说的Javascript。看看这个link。您将看到如何将自己的脚本文件挂钩到django admin

2)创建您自己的模型,扩展您的ServiceAdmin设置表单值(check this out)表单,并在表单保存时更新表单中的值。