В Django Расширение пользовательской формы для пользовательских - PullRequest
2 голосов
/ 09 декабря 2011

Я расширил свою модель пользователя, как описано в этой публикации SO: Расширение модели пользователя с помощью пользовательских полей в Django

Однако я пытаюсь создать форму создания пользователя, но яполучить следующее:

Объект 'Members' не имеет атрибута 'set_password'

Вот моя форма модели:

class Members(models.Model):
    user = models.OneToOneField(User)

GENDER_CHOICES = ( ... )
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
date_of_birth     = models.DateField()
class Meta:
    db_table='members'

def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Members.objects.create(user=instance)

post_save.connect(create_user_profile, sender=User)

.... и моя форма ....

class SignUpForm(UserCreationForm):
    GENDER_CHOICES = ( ... )
    email = forms.EmailField(label='Email address', max_length=75)
    first_name   = forms.CharField(label='First Name')
    last_name    = forms.CharField(label='Last Name')
    gender  = forms.ChoiceField(widget=RadioSelect, choices=GENDER_CHOICES)
    date_of_birth = forms.DateField(initial=datetime.date.today)

    class Meta:
        model = Members
        fields = ('username', 'email','first_name', 'last_name')

Я новичок в Django, поэтому заранее спасибо

1 Ответ

2 голосов
/ 09 декабря 2011

Метод, выбранный вами для расширения модели User, заключается в создании UserProfile (который вы назвали Member).Member является , а не подклассом User, поэтому вы не можете вызывать User методы (например, set_password) для него.

Вместо этого, мета-модель SignUpFormдолжен по-прежнему быть User, и чтобы получить расширенный UserProfile, вы должны вызвать user.get_profile ().Например, чтобы получить пол пользователя, вы должны позвонить user.get_profile().gender.

Прочитать https://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users для получения дополнительной информации о расширении профиля пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...