【发布时间】:2015-12-17 10:07:32
【问题描述】:
当用户在我的应用中注册时,他必须输入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,但我想要一些不那么老套的东西。我可以在表单验证/处理期间手动填充用户实例的某些字段吗?
编辑
为了避免混淆:我不想在UserModel 中添加 full_name 字段。我只是使用股票UserModel,但我想通过允许用户直接输入full_name然后以编程方式生成first_name和last_name来简化表单。
【问题讨论】:
-
@ofnowhereland:我不需要自定义用户模型。它有我需要的一切。
-
@Sayse:也许我还不够清楚。
full_name只是一个表单字段,而不是用户模型字段。用户模型中的字段确实是first_name和last_name(在stock UserModel 中定义),而notfull_name,所以没有重复。我只是不想强迫用户在表单中填写两个单独的字段。 -
啊,好吧,所以这纯粹是一个几乎是装饰性的前端东西(或者无论如何都是可用性)。我本来希望您提供的表单代码可以工作....您对此是否有任何错误(表单无效?)? (我已经删除了我以前的 cmets 以消除您问题中的噪音)
-
@Sayse:是的,我想你可以称之为可用性。而且完全没有错误,但是模型字段
first_name和last_name没有填充。
标签: django django-registration