【发布时间】:2012-06-24 16:56:42
【问题描述】:
我的 Django 应用程序中有一个用户注册表单,它在用户尝试注册时收集其他数据,例如地址、城市、国家/地区、电话号码等。
此数据通过post_save 信号保存在Account 模型类中。用户创建过程是这样的:
# Function to Create user Account/Profile
def create_user_account(sender, instance, created, **kwargs):
if created:
models.Account.objects.create(user=instance)
# Create User / User Registration
def UserRegistration(request):
if request.method == 'POST':
username = request.POST['fn'].capitalize() + ' ' + request.POST['ln'].capitalize()
# CREATE USER
newuser = User.objects.create_user(username=username, email=request.POST['email'], password=request.POST['pw'])
newuser.first_name = request.POST['fn'].capitalize()
newuser.last_name = request.POST['ln'].capitalize()
newuser.save()
return HttpResponse(username)
#Post Save handler to create user Account/Profile
post_save.connect(create_user_account, sender=User)
这里UserRegistration函数在用户发布表单时被调用,在这个函数下,我可以获得POST数据,我想要的是将数据传递给create_user_account方法,以便它填写Account 模型。
现在,我确实看到在数据库中创建了Account 对象,但是除了用户字段之外的所有字段都是空的。显然,因为 POST 变量没有被传递给create_user_account 方法。
【问题讨论】:
-
... 但是在您的示例中,您已经将所有信息存储在您的用户模型('fn','ln')中,因此您应该能够通过 instance.first_name 在您的
create_user_account函数。或者我错过了什么? -
如果你想使用一些来自 POST 的数据,你应该在视图中创建
Account。 Signals 不是为此而设计的。 -
@arie 还有更多数据尚未被该方法使用。
-
@astynax 谢谢,看来我需要这样做..