2013-11-26 152 views
2

我有這種情況: 服務修復可能包括修復/安裝一臺機器中的多個備件。對於服務維修中涉及的每一個備件,技術人員可以選擇其狀態(新的,舊的,翻新的)。在所謂的PartCostRate一個單獨的表,我映射成本百分比的狀態:Django admin - 如何根據其他模型字段值計算字段值

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以便interactivley在其字段中顯示計算的成本。因爲有時他們可能會手動更改它。

在此先感謝

回答

1

有兩種方法可以做到這

1)投票像你說的。看看這個link。 2)創建你自己的模型,擴展你的ServiceAdmin設置窗體值(check this out)窗體並在form保存窗體中更新窗體的值。

+0

我是否正確如果我說:我不能更新成本字段值取決於在第二個選項中保存按鈕的命中之前所選擇的狀態?我希望用戶看到該值,因爲有時(出於某些原因),他們需要在保存之前對其進行更改。如果屬實,那麼我剩下選項1. – blaise

+0

你是對的。在用戶點擊「保存」按鈕後,所有在save()方法中發生的事情都會完成。但是這並不是一個問題,因爲您可以在保存表單後顯示相同的視圖。儘管django管理員流程的其他部分會發生這種變化,但可能不是一個好的選擇:P。 –

相關問題