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