django注册使用信号创建空白django-profiles [英] django-registration creating blank django-profiles using signals

查看:279
本文介绍了django注册使用信号创建空白django-profiles的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经完成了解决方案 here 和Shacker的 django-profiles:The Missing Manual 及其后的信号解决方案 Dmitko ,并回答

以下是详细信息:



AUTH_PROFILE_MODULE =members.Profile



从members.models.py

  class Profile(models.Model):
member model。
GENDER_CHOICES =(
(1,'Male'),
(2,'女'),

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 b
$ b class Meta:
verbose_name = _('Profiles')
verbose_name_plural = _('Profiles')
db_table ='Profiles'
ordering =( 'last_name','first_name',)

From members.forms.py:

$从django.contrib.auth.models导入b
$ b

 从basic.members.models导入的用户
导入配置文件
from registration.forms import RegistrationForm,RegistrationFormTermsOfService,Regi strationFormUniqueEmail
从django.db.models导入信号
from basic.members.signals import create_profile

attrs_dict = {'class':'required'}

class ProfileForm(RegistrationFormTermsOfService,RegistrationFormUniqueEmail):
GENDER_CHOICES =(
(1,'Male'),
(2,'女'),

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()
除了:
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)

from members.signals.py:

  def create_profile(sender,instance,signal,created,** kwargs):
创建用户时也创建一个匹配的配置文件。

from basic.members.models import配置文件

如果创建:
配置文件user = instance).save()

和members.regbackend.py:

  def create_profile(sender,instance,signal,created,** kwargs):
创建用户时也创建一个匹配的配置文件

从basic.members.models导入配置文件

如果创建:
配置文件(用户=实例).save()

我是st科军。我的ProfileForm基本上是添加字段到用户注册页面,但保存,它正在创建一个用户对象与用户名的电子邮件地址,但在用户对象或配置文件对象不保存名字和姓氏。但是,使用空白字段创建一个空白配置文件。我必须丢失一些小的东西,但我似乎看不到它。



所以信号正在工作,但是数据没有被保存到配置文件中。老实说,我们心爱的Django的这个解决方案应该在一个最佳实践中放在一起的地方。



帮助。

解决方案

您的会员在哪里定义?我甚至不能看到它被导入您的 ProfileForm 。您是否在同一页面上放置 ProfileForm UserRegistrationForm



如果用户正在填写这两种表单(甚至填写 ProfileForm ),则不需要信号 - 在 save )为您的 ProfileForm ,只需为您创建个人资料:



<$ p $

$ =
$ =
$ =

$ = )
data.first_name = self.cleaned_data [first_name]
data.first_name = self.cleaned_data [last_name]
data.save()


I have gone through the solution here and Shacker's django-profiles: The Missing Manual and subsequent signals solution by Dmitko and answers here and many places.

Here are the details:

AUTH_PROFILE_MODULE = "members.Profile"

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

From 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)

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

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

I am stuck. Basically my ProfileForm is adding fields to User Registration page but on saving, it is creating a User object with the username an email address but with First and Last name either in the User Object nor the Profile Object are not saved. However a blank Profile is created with the blank fields. I must be missing something small but I can't seem to see it.

So the signals are working but the data is not being saved into the profile.

Honestly, this solution in to our beloved Django should all be in one place with best practice put together for ease.

Help.

解决方案

Where is your Member model defined? I can't even see it being imported for your ProfileForm. Are you putting the ProfileForm and UserRegistrationForm on the same page?

If users are filling out both forms (or even filling out the ProfileForm), you don't need a signal - in your save() for your ProfileForm, just have it create the profile for you:

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

这篇关于django注册使用信号创建空白django-profiles的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆