LoginSignup
0
1

More than 3 years have passed since last update.

犬ですが何か?Django--カスタムユーザーモデルを作成する2

Last updated at Posted at 2020-09-01

追加情報の登録

こんにちは!柴犬のぽん太です。山でイノシシに追いかけられる夢を見ました。とても怖かったです。

さて、前回作成したカスタムユーザーモデルでは、dogname, introductionを追加したのですが、登録画面には下に示すように、その入力項目はありませんでした。

スクリーンショット 2020-08-30 20.46.29.png

ここにdognameとintroductionの入力項目を追加しましょう。

SignupFormのオーバーライド

入力フォームでdognameとintroductionが入力できるようにするために、SignupFormに追加します。

accounts/forms.py
from allauth.account.forms import SignupForm
from django import forms
from .models import CustomUser

from django.utils.translation import gettext, gettext_lazy as _, pgettext


class CustomSignupForm(SignupForm):
    dogname = forms.CharField(label=_("Dog Name"),
                              widget=forms.TextInput(
                                  attrs={"placeholder": _('Dog Name')}
                              )
                              )
    introduction = forms.CharField(label=_("Introduction"),
                                   widget=forms.Textarea(
                                       attrs={"placeholder": _('Introduction')}
                                   ))

    class Meta:
        model = CustomUser

    def signup(self, user):
        user.dogname = self.cleaned_data['dogname']
        user.introduction = self.cleaned_data['introduction']
        user.save()
        return user


class UpdateProfileForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.user = kwargs.get('instance', None)
        for field in self.fields.values():
            field.widget.attrs['class'] = 'form-control'

    class Meta:
        model = CustomUser
        fields = ('email', 'username', 'dogname', 'introduction')

DefaultAccountAdapterのオーバーライド

ユーザー情報を保存するためのDefaultAccountAdapterのメソッドsave_user()をオーバーライドします。ポイントは、save_userの引数commitをTrueとしておき、

accounts/adapter.py
from allauth.account.adapter import DefaultAccountAdapter


class AccountAdapter(DefaultAccountAdapter):

    def save_user(self, request, user, form, commit=True):
        """
        This is called when saving user via allauth registration.
        we override this to set additional data on user object.
        """

        user = super(AccountAdapter, self).save_user(request, user, form, commit=False)
        user.dogname = form.cleaned_data.get('dogname')
        user.introduction = form.cleaned_data.get('introduction')
        user.save()

ACCOUNT_FORMS, ACCOUNT_ADAPTERの設定

CustomSignupFormとAccountAdapterを使用できるように設定します。

shiba_app/settings.py
ACCOUNT_FORMS = {
    'signup': 'accounts.forms.CustomSignupForm',
}

ACCOUNT_ADAPTER = 'accounts.adapter.AccountAdapter'
ACCOUNT_SIGNUP_PASSWORD_ENTER_TWICE = False

ACCOUNT_SIGNUP_PASSWORD_ENTER_TWICE = False
では、パスワードを一度だけ入力するようにしています。

表示テスト

http://127.0.0.1:8000/accounts/signup/
にアクセスし、Dog NameとIntroductionが入力できることを確認します。

スクリーンショット 2020-09-02 6.31.03.png

全ての項目を入力したらセーブし、管理画面に行って正しく入力されていることを確認します

スクリーンショット 2020-09-02 6.34.55.png

うまくいきました!じゃあまたね!バイバイ!

参考記事1:Djangoでdjango-allauthとCustomUserを使った認証機能を作成
参考記事2:Creating and Populating User instances

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1