从 full_name 填充 first_name 和 last_name
Populate first_name and last_name from full_name
当用户在我的应用程序中注册时,他必须输入 full_name
。 UserModel
没有 full_name 字段,但有 first_name
和 last_name
,所以我有一个天真的函数,它足以满足我的用例:
def split_full_name(full_name):
if not full_name:
first_name, last_name = None, None
else:
parts = full_name.split(' ')
if len(parts) == 1:
first_name = parts[0]
last_name = None
elif len(parts) == 2:
first_name = parts[0]
last_name = parts[1]
else:
first_name = parts[0]
last_name = ' '.join(parts[1:])
return first_name, last_name
我正在按照说明覆盖注册表 here:
class MyRegistrationForm(RegistrationForm):
full_name = forms.CharField(required=False)
def clean_full_name(self):
full_name = self.cleaned_data['full_name']
first_name, last_name = split_full_name(full_name)
self.cleaned_data['first_name'] = first_name
self.cleaned_data['last_name'] = last_name
return full_name
但是 cleaned_data
中的 first_name
和 last_name
没有保存到模型中。我应该怎么做才能做到这一点?
我已经看到了 use of hidden fields,但我想要一些不那么骇人听闻的东西。我可以在表单验证/处理期间手动填充用户实例的某些字段吗?
编辑
只是为了避免混淆:我不想添加 full_name
字段到UserModel
。我只是在使用股票 UserModel
,但我想通过允许用户直接输入 full_name
然后以编程方式生成 first_name
和 last_name
.[=31 来简化表单=]
尝试在表单实例上设置名字和姓氏,而不是将它们添加到 cleaned_data
。
def clean_full_name(self):
full_name = self.cleaned_data['full_name']
first_name, last_name = split_full_name(full_name)
self.instance.first_name = first_name
self.instance.last_name = last_name
return full_name
如果这不起作用,我会尝试覆盖表单的 save()
方法并在那里设置值。
顺便说一句,您可能在将 None
分配给 first_name
和 last_name
时遇到问题。我会改用空字符串 ''
。
当用户在我的应用程序中注册时,他必须输入 full_name
。 UserModel
没有 full_name 字段,但有 first_name
和 last_name
,所以我有一个天真的函数,它足以满足我的用例:
def split_full_name(full_name):
if not full_name:
first_name, last_name = None, None
else:
parts = full_name.split(' ')
if len(parts) == 1:
first_name = parts[0]
last_name = None
elif len(parts) == 2:
first_name = parts[0]
last_name = parts[1]
else:
first_name = parts[0]
last_name = ' '.join(parts[1:])
return first_name, last_name
我正在按照说明覆盖注册表 here:
class MyRegistrationForm(RegistrationForm):
full_name = forms.CharField(required=False)
def clean_full_name(self):
full_name = self.cleaned_data['full_name']
first_name, last_name = split_full_name(full_name)
self.cleaned_data['first_name'] = first_name
self.cleaned_data['last_name'] = last_name
return full_name
但是 cleaned_data
中的 first_name
和 last_name
没有保存到模型中。我应该怎么做才能做到这一点?
我已经看到了 use of hidden fields,但我想要一些不那么骇人听闻的东西。我可以在表单验证/处理期间手动填充用户实例的某些字段吗?
编辑
只是为了避免混淆:我不想添加 full_name
字段到UserModel
。我只是在使用股票 UserModel
,但我想通过允许用户直接输入 full_name
然后以编程方式生成 first_name
和 last_name
.[=31 来简化表单=]
尝试在表单实例上设置名字和姓氏,而不是将它们添加到 cleaned_data
。
def clean_full_name(self):
full_name = self.cleaned_data['full_name']
first_name, last_name = split_full_name(full_name)
self.instance.first_name = first_name
self.instance.last_name = last_name
return full_name
如果这不起作用,我会尝试覆盖表单的 save()
方法并在那里设置值。
顺便说一句,您可能在将 None
分配给 first_name
和 last_name
时遇到问题。我会改用空字符串 ''
。