2012-01-29 236 views
2

我需要在用戶註冊時保存有關用戶的其他信息。 我用這個: 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() 

感謝。

回答

9
profile = user.get_profile() 
profile.key = ''.join(random.choice(string.digits) for i in range(12)) 
profile.save() 
user.save() 

這是做了正確的道路。你必須保存配置文件對象的實例,以及用戶對象

+2

無自定義用戶配置文件的教程似乎提到這一點。謝謝! – 2012-03-25 18:39:35

0

你也可以試試這個,

@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()

相關問題