2015-09-06 47 views
0

我是Django的新手,我试图实现一个项目,让公司可以注册为用户。由于这些公司可能来自不同的国家,并且有不同的公司形式,因此它们在注册时有不同的强制性领域。这些差异只是信息性的,对行为没有任何影响,即所有用户在注册后都应该得到平等对待。目前我只需要支持2个国家和2个企业形式,但未来可能会有更多的支持。 我以一个用户简介(与用户一对一的关系)形式开始的单一公司模型,但在这种情况下,我必须将公司形式和国家之间不同的字段设置为可空,并处理正确的输入在表格中? 此外,我想在管理员的单个列表中看到所有用户(公司)。Django:如何为具有不同必填字段的用户建模

你会如何在Django中建模?

回答

0

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') 

你的形式会表现得取决于你传入该参数,因此你只需要一个形式对于所有国家(如你所说的差异是微不足道的)。希望这可以帮助。

+0

非常感谢您的帮助!这正是我只用一种公司模式寻找方法的原因。我可以传递一个标识国家和公司的参数并根据参数定制表单。这只是最后一个问题。我有一些自定义表单域,例如从django口味,这是不同的国家和我不能使用传递的参数。 –

+0

我找到了最后一个问题的答案。我也可以根据传入的参数在__init__中创建相应的字段:[link](http://stackoverflow.com/questions/15086175/django-set-choicefield-in-form-after-creation)。 –