2017-08-11 13 views
1

私はdjangoの初心者です。私はdjango 1.10をallauthで使用しています。フロントエンドの登録、ユーザー確認の電子メール、検証、電子メールによるログインなどがあります。ユーザーがdjango管理者で作成されると、別のテーブルにユーザーデータを保存します

allauthアプリケーションは、ユーザー作成時に3つのテーブルに3つの行を挿入します。

1. auth_user 
2. account_emailaddress 
3. account_emailconfirmation 

auth_usergeneral_userprofileテーブルの行を作成し、管理者からユーザーを追加します。 adminがユーザーを作成するときに、account_emailaddressテーブルに行を挿入したいと思います。 models.pyがどのように見える

id 
email 
verified 
primary 
user_id 

are--

account_emailaddressのフィールド -

class EmailAddress(models.Model): 
    #user = models.ForeignKey(User) 
    user = models.OneToOneField(User, unique=True, related_name ='address') 
    email = models.EmailField() 
    verified = models.BooleanField(verbose_name=_('verified'), default=True) 
    primary = models.BooleanField(verbose_name=_('primary'), default=True) 

    class Meta: 
     db_table = 'account_emailaddress' 


class UserProfile(models.Model, HashedPk): 
    user = models.OneToOneField(User, unique=True, related_name ='profile') 
    job_title = models.CharField(max_length=128, blank=True, null=False, default="") 
    website = models.URLField(max_length=255, blank=True, null=True) 
    organisation = models.CharField(max_length=50, blank=True, null=True, default="") 
    phone_number = PhoneNumberField(blank=True, null=True) 


@receiver(post_save, sender=User) 
def create_profile(sender, instance, created, **kwargs): 
    if created: 
     UserProfile.objects.create(user=instance) 
     EmailAddress.objects.create(user=instance 

Forms.pyこの

from django import forms 
from django.contrib.auth.models import User 
from django.utils.translation import ugettext as _ 
from crispy_forms.helper import FormHelper 
from crispy_forms.layout import Layout, Div, Field 
from ajax_select.fields import AutoCompleteSelectField, AutoCompleteField 
from phonenumber_field.formfields import PhoneNumberField 
from . import models 
from captcha.fields import ReCaptchaField 


class SignUpForm(forms.Form): 
    first_name = forms.CharField(max_length=30) 
    last_name = forms.CharField(max_length=30) 
    phone_number = PhoneNumberField(label=_("Phone (Please state your country code eg. +44)")) 
    organisation = forms.CharField(max_length=50) 
    email = forms.EmailField() 
    password1 = forms.CharField(max_length=20) 
    password2 = forms.CharField(max_length=20) 
    captcha = ReCaptchaField(attrs={'theme' : 'clean'}) 


    def signup(self, request, user): 
     user.first_name = self.cleaned_data['first_name'] 
     user.last_name = self.cleaned_data['last_name'] 
     """ 
     profile, created = models.UserProfile.objects.get_or_create(user=user) 
     profile.phone_number = self.cleaned_data['phone_number'] 
     profile.organisation = self.cleaned_data['organisation'] 
     profile.save() 
     user.save() 
     """ 
     up = user.profile 
     up.phone_number = self.cleaned_data['phone_number'] 
     up.organisation = self.cleaned_data['organisation'] 
     user.save() 
     up.save() 

のように見えますどのようにしてユーザーIDとクラスEmailAddressで作成された電子メールをテーブルに保存します。

答えて

1

まず、EmailAdressテーブルにユーザーIDと電子メールを格納する場合は、モデルにこれらのフィールドが必要です。

この後、ハンドラがユーザ作成信号を受信すると、そのようなものを追加できます。

@receiver(post_save, sender=User) 
def create_profile(sender, instance, created, **kwargs): 
    if created: 
     UserProfile.objects.create(user=instance) 
     EmailAdress.objects.create(user_id = instance.id, user_email=instance.email) 
+0

多くのおかげです。まず最初に、モデルの電子メールとユーザーフィールドを取得する必要があります。私はあなたに戻ってきます。 –

+0

データがテーブルに保存されていますが、何らかの理由でモデルが電子メールの価値を取得していません。電子メールの値をテーブルに渡すにはどうしたらいいですか? –

+0

あなたのUserとEmailAdressモデルを投稿してください。 –

関連する問題