0

나는 here 및 Shacker의 django-profiles: The Missing ManualDmitko 및 후속 신호 솔루션에 의해 here 및 여러 장소에 의해 해결책을 보았습니다. members.signals에서django 등록 신호를 사용하여 빈 django - 프로필 만들기

from django.contrib.auth.models import User 
from basic.members.models import Profile 
from registration.forms import RegistrationForm, RegistrationFormTermsOfService, RegistrationFormUniqueEmail 
from django.db.models import signals 
from basic.members.signals import create_profile 

attrs_dict = { 'class': 'required' } 

class ProfileForm(RegistrationFormTermsOfService, RegistrationFormUniqueEmail): 
    GENDER_CHOICES = (
     (1, 'Male'), 
     (2, 'Female'), 
    ) 
    first_name = forms.CharField(widget=forms.TextInput(attrs=attrs_dict)) 
    last_name = forms.CharField(widget=forms.TextInput(attrs=attrs_dict)) 
    gender = forms.IntegerField(widget=forms.RadioSelect(choices=GENDER_CHOICES)) 
    birth_date = forms.DateField(widget=SelectDateWidget(years=range(1911,1999))) 

    def save(self, user): 
     try:  
      data = user.get_profile() 
     except: 
      data = Profile(user=user) 
      data.first_name = self.cleaned_data["first_name"] 
      data.first_name = self.cleaned_data["last_name"] 
      data.save() 

class UserRegistrationForm(RegistrationForm): 
    first_name = forms.CharField(max_length=100)  
    last_name = forms.CharField(max_length=100) 

signals.post_save.connect(create_profile, sender=User) 

: members.forms.py에서 members.models.py

class Profile(models.Model): 
    """member model.""" 
    GENDER_CHOICES = (
     (1, 'Male'), 
     (2, 'Female'), 
    ) 
    user = models.ForeignKey(User, unique=True) 
    first_name = models.CharField(_('first name'), max_length=100) 
    middle_name = models.CharField(_('middle name'), blank=True, max_length=100) 
    last_name = models.CharField(_('last name'), max_length=100) 
    slug = models.SlugField(_('slug'), unique=True) 
    gender = models.PositiveSmallIntegerField(
     _('gender'), 
     choices=GENDER_CHOICES, 
     blank=True, 
     null=True, 
     ) 
    birth_date = models.DateField(_('birth date'), blank=True, null=True) 

    class Meta: 
     verbose_name = _('Profiles') 
     verbose_name_plural = _('Profiles') 
     db_table = 'Profiles' 
     ordering = ('last_name', 'first_name',) 

에서

AUTH_PROFILE_MODULE = "members.Profile "

: 여기

은 세부 사항입니다 .py :

,451,515,
def create_profile(sender, instance, signal, created, **kwargs): 
    """When user is created also create a matching profile.""" 

    from basic.members.models import Profile 

    if created: 
     Profile(user = instance).save() 

그리고 members.regbackend.py :

def create_profile(sender, instance, signal, created, **kwargs): 
    """When user is created also create a matching profile.""" 

    from basic.members.models import Profile 

    if created: 
     Profile(user = instance).save() 

내가 붙어입니다. 기본적으로 내 ProfileForm은 사용자 등록 페이지에 필드를 추가하지만 저장시 사용자 이름과 전자 메일 주소를 가진 User 개체를 만들지 만 User Object 또는 Profile 개체의 성과 이름은 저장되지 않습니다. 그러나 빈 필드가있는 빈 프로파일이 작성됩니다. 나는 작은 것을 놓치고 있어야하지만 나는 그것을 볼 수 없을 것입니다.

신호가 작동하지만 데이터가 프로필에 저장되지 않습니다.

솔직히 말해서, 우리의 사랑하는 장고에 대한이 솔루션은 모든 것이 모범 사례와 함께 한 곳에 모여 져야합니다.

도움말.

답변

0

Member 모델은 어디에 정의되어 있습니까? ProfileForm에 대해 가져올 수없는 것으로 보입니다. 동일한 페이지에 ProfileFormUserRegistrationForm을 넣으시겠습니까?

사용자가 모두 양식을 작성 (또는 심지어 ProfileForm을 작성)하는 경우에는 신호가 필요하지 않습니다 - 그냥 당신을위한 프로파일을 생성 한 사용자의 ProfileForm 대한 save()의를 :

def save(self, user): 
     try:  
      data = user.get_profile() 
     except: 
      data = Profile(user=user) 
      data.first_name = self.cleaned_data["first_name"] 
      data.first_name = self.cleaned_data["last_name"] 
      data.save() 
+0

을 안녕 루크, 편집 실수. 항목을 편집했습니다. UserRegistrationForm과 signals.post_save.connect (..)를 제거했는데 이제는 빈 프로파일을 얻지 못했습니다. – Afrowave

+0

새 사용자를 만들지 만 확장 데이터가없는 빈 프로필이 저장됩니다. 저장 기능이 데이터를 저장하지 않는 것 같습니다. 무엇이 잘못 될 수 있습니까? – Afrowave

관련 문제