Django在操作領域非常靈活。您可以隨時在字段中添加/刪除required
,甚至可以即時從表單中刪除字段。您只需將參數傳遞給窗體構造函數__init__()
。這裏有一個簡單的例子:
class BlahForm(forms.ModelForm):
class Meta:
model = Blah
fields = ('field1', 'field2',)
def __init__(self, *args, **kwargs):
param = kwargs.pop('param', None)
super(BlahForm, self).__init__(*args, **kwargs)
# how to mark a field as "not required"
if param == 'not_required':
self.fields['field1'].required = False
# here's how to delete a field
elif param == 'delete_field':
del self.fields['field1']
在views.py可以初始化你這樣的形式:
if 'condition1':
form = BlahForm(request.POST or None, param='not_required')
elif 'condition2':
form = BlahForm(required.POST or None, param='delete_field')
你的形式會表現得取決於你傳入該參數,因此你只需要一個形式對於所有國家(如你所說的差異是微不足道的)。希望這可以幫助。
非常感謝您的幫助!這正是我只用一種公司模式尋找方法的原因。我可以傳遞一個標識國家和公司的參數並根據參數定製表單。這只是最後一個問題。我有一些自定義表單域,例如從django口味,這是不同的國家和我不能使用傳遞的參數。 –
我找到了最後一個問題的答案。我也可以根據傳入的參數在__init__中創建相應的字段:[link](http://stackoverflow.com/questions/15086175/django-set-choicefield-in-form-after-creation)。 –