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

Django: How to model users with different mandatory fields

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

你会如何在 Django 中建模?

Django 表单在字段操作上非常灵活。您始终可以从字段中 add/remove 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')

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