Wagtail에서 Custom User를 정의하는 방법에 대해서 작성하려고한다. (User에 새로운 필드 추가)

ex) 닉네임

 

https://docs.wagtail.io/en/stable/advanced_topics/customisation/custom_user_models.html

 

Custom user models — Wagtail Documentation 2.14.1 documentation

 

docs.wagtail.io

 

1. User app 생성

먼저 User를 정의하기 위해 새로운 User app을 생성 해줘야한다. (물론 기존 app으로도 가능하지만 대신 models.py에 Page 모델이 존재하면 안된다. Wagtail에서 Page 모델은 User 모델을 포함하기 때문이다. 순환 참조 오류가 발생하니 그냥 user app을 새로 생성해주자.)

 

2. User app 정의

user/models.py

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    country = models.CharField(verbose_name='country', max_length=255)
    status = models.ForeignKey(MembershipStatus, on_delete=models.SET_NULL, null=True, default=1)

유저 모델을 커스텀 하기 위해서는 AbstractUser를 사용한다. 

 

settings/base.py

AUTH_USER_MODEL = 'users.User'

그리고 base.py에서 우리가 커스텀 하는 유저 모델을 재정의 해준다. 

 

wagtail admin Page의 setting에 있는 user 모델에도 우리가 추가한 필드를 정의해주기 위해서 다음과 같이 forms.py 파일을 만들고 작성한다. 

 

user/forms.py

from django import forms
from django.utils.translation import gettext_lazy as _

from wagtail.users.forms import UserEditForm, UserCreationForm

from users.models import MembershipStatus


class CustomUserEditForm(UserEditForm):
    country = forms.CharField(required=True, label=_("Country"))
    status = forms.ModelChoiceField(queryset=MembershipStatus.objects, required=True, label=_("Status"))


class CustomUserCreationForm(UserCreationForm):
    country = forms.CharField(required=True, label=_("Country"))
    status = forms.ModelChoiceField(queryset=MembershipStatus.objects, required=True, label=_("Status"))

forms.py에다가 우리가 추가한 필드의 생성과 수정을 할 때 사용할 form을 정의 해준다. 

그리고 users form.html도 수정이 필요하다. templates 폴더를 만들고 wagtailusers폴더을 만들어주고 다시 users폴더도 만들어주자 그리고 나선  create.html과 edit.html이라는 파일을 만들고 아래와 같이 정의해주자. 

 

3. User tempate 정의

templates/wagtailusers/users/create.html

{% extends "wagtailusers/users/create.html" %}

{% block extra_fields %}
    {% include "wagtailadmin/shared/field_as_li.html" with field=form.country %}
    {% include "wagtailadmin/shared/field_as_li.html" with field=form.status %}
{% endblock extra_fields %}

templates/wagtailusers/users/edit.html

{% extends "wagtailusers/users/edit.html" %}

{% block extra_fields %}
    {% include "wagtailadmin/shared/field_as_li.html" with field=form.country %}
    {% include "wagtailadmin/shared/field_as_li.html" with field=form.status %}
{% endblock extra_fields %}

간단히 정의하자면 country와 status라는 이름의 custom form을 추가하여 사용하겠다는 뜻이다.

 

4. settings 수정

settings/base.py에 우리가 만든 form을 정의 해주어야 한다. 

settings/base.py

WAGTAIL_USER_EDIT_FORM = 'users.forms.CustomUserEditForm'
WAGTAIL_USER_CREATION_FORM = 'users.forms.CustomUserCreationForm'
WAGTAIL_USER_CUSTOM_FIELDS = ['country', 'status']

이제 확인해보면 user form이 추가 되어 있는 것을 확인 할 수 있을 것이다. 

'Back-End > Wagtail, Django' 카테고리의 다른 글

Wagtail Custom Block Field 만들기  (0) 2021.09.19
Wagtail 중첩 StreamField  (0) 2021.09.01
Wagtail All Auth(Google Login)  (0) 2021.08.25
Wagtail Docker 사용 방법  (0) 2021.08.18
Wagtail demo site (breads)  (0) 2021.08.17

+ Recent posts