Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django admin-如何根据其他模型字段值计算字段值_Django_Django Admin - Fatal编程技术网

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

Django admin-如何根据其他模型字段值计算字段值,django,django-admin,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', m

我有这样一个场景: 可能包括在机器中维修/安装多个备件的维修。对于维修中涉及的每个备件,技师可以选择其状态(新的、已使用的、翻新的)。在一个名为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)
管理员

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

class ServiceAdmin(admin.ModelAdmin):
   inlines = [ServicePartInline,]
从管理界面,我如何根据所选状态和数量计算部件的成本(从serviceadmin的内联)。对于已使用的选择,我需要查询PartCostRate模型,以检查已使用的比率,然后检查该零件的exw_价格,然后在不忘记数量的情况下进行计算

我不知道如何从管理员做到这一点。它是否需要javascript才能在其字段中显示计算出的成本。因为有时候他们可能会手动更改它


提前感谢

有两种方法

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


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

如果我说:我无法根据第二个选项中的保存按钮之前的选定状态更新成本字段值,对吗?我希望用户看到该值,因为有时(出于某些原因)他们需要在保存之前更改它。如果是真的,那么我只剩下选项1。你是对的。表单save()方法中发生的一切都是在用户点击“保存”按钮后完成的。但这不一定是个问题,因为保存表单后可以显示相同的视图。虽然这会改变django管理流程的其余部分,但可能不是一个好的选择:P。