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)。 –