Django:如何为具有不同必填字段的用户建模

时间:2015-09-06 07:42:42

标签: django django-models django-forms django-admin

我是Django的新手,我正在尝试实施一个公司可以注册为用户的项目。由于公司可能来自不同的国家,并且有不同的公司形式,因此在注册时会有一些不同的必填字段。这些差异仅仅是信息性的,对行为没有影响,即所有用户在注册后都应得到平等对待。目前我只需要支持2个国家和2个公司表格,但未来可能会支持更多。 我从一个公司模型开始,以用户配置文件的形式(与用户一对一的关系),但在这种情况下,我必须将公司表单和国家/地区之间不同的字段设置为可空,并处理正确的输入表格? 此外,我希望在管理员的单个列表中看到所有用户(公司)。

你会如何在Django中建模?

1 个答案:

答案 0 :(得分: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')

您的表单的行为取决于您传入的参数,因此您只需要一个表单适用于所有国家/地区(正如您所说,差异很小)。希望这会有所帮助。