2016-07-24 45 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') 

的情況下很簡單 - 如果 '性' 是男,FIELD1應要求和Field2應該是空的。 如果'sex'是女性,field2應該被填充並且field1應該在表單中爲空。 在任何情況下,如果沒有設置其他字段,我想自己在服務器中設置它。手段 - 模型需要field1和field2。我只希望只有一個可以在表單中編輯。 我有條件地使用JavaScript在窗體本身中顯示它們,我如何在服務器中執行該操作?

我使用

self.fields.pop('field1') 

形式.clean()嘗試,但因爲它是在現場級

回答

0

仍然需要在the__init__方法不起作用:

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屬性,並自己設置字段值。這個技巧確實是以__init__的形式使用is_bound – user3599803