AngelPlayer`s Diary

장고는 auth.User 모델로 쉽게 회원가입 및 로그인을 구현할 수 있도록 만들어져 있습니다.

 

하지만 기본 필드들(ex. id, password, email...) 이외에 사용자가 원하는 기능이 충분히 있을 수 있습니다.

 

장고는 따라서 이런 요구를 충족시키기 위해 기본 auth.User를 대신하여 사용할 수 있도록 customizing할 수 있는 기능 역시 만들어 두었습니다.

 

장고의 User 커스터마이징 방법은 크게 AbstractUser와 AbstractBaseUser 두 개로 나눌 수 있습니다.

AbstractUser는 기존 User 모델에 있던 필드들과 권한 등을 그대로 유지하고 필요한 필드들을 추가하고 싶은 경우 쉽게 사용할 수 있고, AbstractBaseUser는 아예 새로운 커스텀 유저 모델을 만들어버리는 방법입니다. 상대적으로 AbstractUser가 수정이나 변환이 쉽기 떄문에 AbstractUser 방법을 사용해보도록 하겠습니다.

 

 

 

코드 수정

1. setting.py 수정

# config/setting.py
...
AUTH_USER_MODEL = '앱이름.User'

우선 setting.py에 들어가셔서 마지막에 위 코드를 작성해주시면 됩니다.

(사전에 앱 연결이 되어있지 않다면 마찬가지로 setting.py에 위치한 INSTALLED_APPS코드를 수정하셔야 합니다.)

 

 

2. models.py 수정

# 앱이름/models.py

from django.contrib.auth.models import AbstractUser
from django.db import models


class User(AbstractUser):
    hobby = models.CharField(max_length=50)
    forte = models.CharField(max_length=50)

다음으로 models.py의 코드를 작성해주시면 됩니다.

앞에서 언급했듯이 AbstractUser를 import하여 User에 상속받도록 하였으며, 기존에 있던 auth.User의 기능을 그대로 사용할 수 있기 떄문에 추가로 필요한 필드만 추가해주시면 됩니다.

 

 

 

에러 해결

※ 해당 방법은 기존 DB를 삭제하는 방법을 사용합니다. 협업 또는 기존 DB를 유지해야하는 프로젝트라면 다른 방법을 찾아서 이용하시길 바랍니다.

(mysite) D:\Study\django\mysite>python manage.py makemigrations
Traceback (most recent call last):
  File "D:\Study\django\mysite\manage.py", line 22, in <module>
    main()
  File "D:\Study\django\mysite\manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "C:\venvs\mysite\lib\site-packages\django\core\management\__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "C:\venvs\mysite\lib\site-packages\django\core\management\__init__.py", line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\venvs\mysite\lib\site-packages\django\core\management\base.py", line 330, in run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\venvs\mysite\lib\site-packages\django\core\management\base.py", line 371, in execute
    output = self.handle(*args, **options)
  File "C:\venvs\mysite\lib\site-packages\django\core\management\base.py", line 85, in wrapped
    res = handle_func(*args, **kwargs)
  File "C:\venvs\mysite\lib\site-packages\django\core\management\commands\makemigrations.py", line 101, in handle
    loader.check_consistent_history(connection)
  File "C:\venvs\mysite\lib\site-packages\django\db\migrations\loader.py", line 302, in check_consistent_history
    raise InconsistentMigrationHistory(
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency common.0001_initial on database 'default'.

model을 수정했으니 migrate 작업을 수정해야하는데 makemigrations 작업을 진행하면 에러가 나타납니다.

 

다양한 해결 방법 중에 저는 기존 DB를 삭제해버리고 다시 생성하여 해결하는 방법을 사용하였습니다.

 

 

프로젝트가 있는 폴더에 진입하시면 위와 같이 db.sqlite3라는 파일이 있습니다.

저는 혹시 모를 문제를 대비하여 백업용으로 압축을 진행하였구요.

해당 파일을 삭제해주시면 됩니다.

 

 

삭제 후 다시 python manage.py migrate를 진행하시면 정상적으로 작동하는 모습을 확인할 수 있습니다.

 

마찬가지 python manage.py runserver 역시 정상적으로 작동합니다.

 

 

 

 

 

 

 

 

- 참고 문헌 -

https://stackoverflow.com/questions/44651760/django-db-migrations-exceptions-inconsistentmigrationhistory

공유하기

facebook twitter kakaoTalk kakaostory naver band