0

hereとShackerのdjango-profiles: The Missing Manualとそれ以降のシグナル解答をDmitkoと答えてhereと多くの場所で解決しました。ここでdjango登録シグナルを使用して空のdjangoプロファイルを作成する

詳細は以下のとおりです。

AUTH_PROFILE_MODULE = "members.Profile

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',) 

からmembers.forms.pyから:

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.signalsから.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() 

そして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はユーザー登録ページにフィールドを追加していますが、保存時にユーザー名と電子メールアドレスを持つユーザーオブジェクトを作成していますが、ユーザーオブジェクトまたはプロファイルオブジェクトのFirst and Last名は保存されません。ただし、空白のフィールドを持つ空白のプロファイルが作成されます。私は何か小さいものを見逃しているに違いないが、私はそれを見ることができない。

信号が機能していますが、データがプロファイルに保存されていません。

正直言って、私たちの最愛のDjangoのこの解決策はすべて、ベストプラクティスをまとめて1か所にまとめることが大切です。

ヘルプ。

答えて

0

Memberモデルはどこに定義されていますか?私はあなたのProfileFormのためにそれがインポートされているのを見ることさえできません。あなたはProfileFormUserRegistrationFormを同じページに入れていますか?

ユーザーが両方のフォームを記入(あるいはProfileFormを記入)している場合は、信号を必要としない - あなたsave()であなたのProfileFormのために、ちょうどそれがあなたのためのプロファイルを作成する必要があり:

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

関連する問題