2016-07-24 6 views
0

このモデルの形式を想定しますdjango - フォームデータ自体に基づいてフォームフィールドを削除する方法は?

class MyModel(models.Model): 
    sex = models.CharField(max_length=1, default='M') 
    field1 = models.CharField(max_length=20) 
    field2 = models.CharField(max_length=20 

class MyForm(ModelForm): 
    class Meta: 
     model = MyModel 
     fields = ('sex', 'field1', 'field2') 

場合は単純です - 「セックス」の男性であれば、フィールド1が必要とされなければならないとフィールド2は空でなければなりません。 'sex'がFemaleの場合、field2は入力し、field1はフォームで空にする必要があります。 いずれの場合も、他のフィールドが設定されていない場合は、サーバーで自分自身で設定する必要があります。手段 - フィールド1とフィールド2の両方がモデルで必要です。私はちょうど1つがフォームの中で編集可能であることを望む。 javascriptを使用してフォームに条件付きで表示されますが、どのようにサーバーでそれを強制できますか?

私は形.clean()

self.fields.pop('field1') 

を使用してみましたが、それはまだthe__init__方法では、フィールドレベル

答えて

0

に必要とされるようにそれは動作しません:私が撮った

def __init__(self, *args, **kwargs): 
     if self.is_bound: 
      sex = self.data.get('sex', None) 
      if sex == 'M': 
       self.fields['field1'].required = False 
+0

あなたフィールドに.disabled属性を使用し、フィールド値を自分で設定するだけです。このトリックは実際にis_boundを__init__の形式で使用していました – user3599803

関連する問題