2017-10-18 3 views
0

だから他のフィールドの条件が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) 

brand == HPの場合、管理者にデータを入力しようとするとwindows_osまたはlinuxのフィールドだけが表示され、mac_osの非表示フィールドが表示されます。あなたはadmin.pyできれいなメソッドをオーバーライドすることができ

+0

ブランドは事前に決定されているか、または自動入力されているか、またはユーザーの入力です。また、ドロップダウンフォームフィールドやそのようなものについて話していますか? – noes1s

+0

ユーザー入力です。 – Arcee

+0

"mac_os"、 "windows_os"、 "linux"フィールドは何ですか? –

答えて

1

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_osまたはlinuxの値を入力しないことを検証しています。

これは予期したとおりの動作ではありません。実際に、モデルを保存しようとすると、エラーメッセージが表示されます。時間内の解決策が絶対に必要な場合は、DjangoコードよりJSが多く必要になります。

関連する問題