用户在Django中创建后更新用户配置文件

时间:2013-03-26 03:05:12

标签: python django django-models django-views django-authentication

我通过添加自定义“配置文件”模型,然后在用户save / create上实例化,使用1.4x方法扩展了用户对象。在我的注册过程中,我想向配置文件模型添加其他信息。视图成功呈现,但配置文件模型不保存。代码如下:

    user = User.objects.create_user(request.POST['username'], request.POST['email'], request.POST['password'])
    user.save()

    profile = user.get_profile()
    profile.title = request.POST['title']
    profile.birthday = request.POST['birthday']

    profile.save()

2 个答案:

答案 0 :(得分:6)

使用此代码更新models.py

from django.db.models.signals import post_save
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        profile, created = UserProfile.objects.get_or_create(user=instance)

post_save.connect(create_user_profile, sender=User)

现在当你做

user.save()

它会自动创建一个配置文件对象。那么你可以做到

user.profile.title = request.POST['title']
user.profile.birthday = request.POST['birthday']
user.profile.save()
希望它有所帮助。

答案 1 :(得分:1)

user是User模型的一个实例。而且似乎你正试图获得一个已经存在的实例。这取决于你从user.get_profile返回的内容。您必须启动UserProfile实例。更简单的方法可能是这样的:

user_profile = UserProfile.objects.create(user=user)
user_profile.title = request.POST['title']
...
.
.
user_profile.save()