【问题标题】:Saving a extended user profile保存扩展的用户配置文件
【发布时间】:2012-01-29 18:30:41
【问题描述】:

我需要在用户注册时保存有关用户的其他信息。 我用这个: https://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users ,但我卡住了。关系已创建,但字段 key 为空。

models.py

from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save

class UserProfile(models.Model):
    user = models.OneToOneField(User, unique=True)
    key = models.CharField(max_length=20, null=True, blank=True)

    def __unicode__(self):
        return u'%s' % self.user

def create_user_profile(sender, instance, created, **kwargs):
    if created:
        UserProfile.objects.create(user=instance)

post_save.connect(create_user_profile, sender=User)

views.py

def registration(request):
    form = RegistrationForm(request.POST or None)
    if form.is_valid():
        first_name = form.cleaned_data['first_name']
        last_name = form.cleaned_data['last_name']
        email = form.cleaned_data['email']
        password = form.cleaned_data['password']
        user = User.objects.create_user(login, email, password)
        user.first_name = first_name
        user.last_name = last_name
        user.is_active = False
        # I've tried both ways, but it not write anything in to the table
        # user.key = ''.join(random.choice(string.digits) for i in range(12))
        # user.get_profile().key = ''.join(random.choice(string.digits) for i in range(12))

        user.save()

谢谢。

【问题讨论】:

    标签: django django-models


    【解决方案1】:
    profile = user.get_profile()
    profile.key = ''.join(random.choice(string.digits) for i in range(12))
    profile.save()
    user.save()
    

    这是正确的做法。您必须保存配置文件对象的实例以及用户对象

    【讨论】:

    • 自定义用户配置文件教程似乎都没有提到这一点。谢谢!
    【解决方案2】:

    你也可以试试这个,

    @receiver(post_save, sender=User) def create_or_update_user_profile(sender, instance, created, **kwargs): if created: Profile.objects.create(user=instance) instance.profile.save()

    【讨论】:

    • 嘿,你能告诉我你为什么写instance.profile.save()吗?为什么我们需要它?仅在创建配置文件时创建配置文件还不够吗?
    猜你喜欢
    • 1970-01-01
    • 2011-02-19
    • 2021-12-30
    • 2012-03-11
    • 2010-12-26
    • 2015-07-08
    • 1970-01-01
    • 2018-01-26
    • 2014-07-06
    相关资源
    最近更新 更多