2017-10-18 52 views
0

所以,如果我在models.py有這樣的代碼如果在django中沒有滿足其他字段的條件,你如何隱藏一個字段?

class Computer(models.Model): 
    brand = models.CharField(max_length=225) 

如何顯示以下兩種附加字段的在我的Django管理取決於上述品牌的價值?

mac_os_version = models.CharField(max_length=225) 
windows_os_version = models.CharField(max_length=225) 
linux_os_version = models.CharField(max_length=225) 

例如,如果品牌==惠普只有windows_os或linux的字段纔會在您嘗試在管理員中輸入數據時顯示,並且會顯示mac_os的隱藏字段。

+0

品牌是預先確定的還是自填充的還是用戶輸入的。你還在談論一個下拉表單字段或類似的東西? – noes1s

+0

他們是用戶輸入。 – Arcee

+0

什麼是您的「mac_os」,「windows_os」和「linux」字段? –

回答

1

你可以在admin.py重寫清潔方法:

from django.core.exceptions import ValidationError 

def clean(self): 

    windows = {'HP','otherbrand1','otherbrand2'} 

    if self.cleaned_data['brand'] in windows and \ 
    (self.cleaned_data['mac_os'] or self.cleaned_data['linux']): 
     raise ValidationError('Only windows is allowed') 

    return self.cleaned_data 

cleaned_data是已經被驗證表單值的字典。因此,如果預先指定了Windows品牌,則您正在驗證某人未輸入字段mac_oslinux的值。

請注意,這不會是你期待的確切行爲。事實上,如果他試圖保存模型,這隻會向用戶提出錯誤消息。如果你絕對需要一個及時的解決方案,你將需要比Django代碼更多的JS。

相關問題