如果在django中没有满足其他字段的条件,你如何隐藏字段?

时间:2017-10-18 23:24:17

标签: python django

所以如果我在models.py中有这个代码

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

如何根据上述品牌的价值在django admin中显示以下其他字段?

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

e.g。如果brand == HP,当您尝试在管理员中输入数据时,将显示windows_os或linux的字段,并且将显示mac_os的隐藏字段。

1 个答案:

答案 0 :(得分:1)

您可以在 admin.py

中覆盖clean方法
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。