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か所にまとめることが大切です。
ヘルプ。
こんにちはルーク、私の編集ミス。エントリを編集しました。私はUserRegistrationFormとsignals.post_save.connect(..)を削除しましたが、今は空のプロファイルを取得しません。 – Afrowave
新しいユーザーが作成されていますが、拡張データのない空のプロファイルが保存されています。保存機能がデータを保存していないようです。何がうまくいかないでしょうか? – Afrowave