Model 클래스 만들기
이번 시간에는 Model에 대해 알아보자
모델이라는 것은 데이터베이스와 상호작용하기 위해서 사용 되어진다.
모델은 장고에서는 클래스로 구현 된다.
1 2 3 4 5 6 | class GuessNumbers(models.Model): name = models.CharField(max_length=24) lottos = models.CharField(max_length = 255, default='[1,2,3,4,5,6]') text = models.CharField(max_length = 255) num_lotto = models.IntegerField(default=5) update_date = models.DateTimeField() | cs |
로또 추첨 프로그램을 만들 것이므로 이에 맞는 데이터베이스 테이블을 작성하자
가장 먼저 데이터베이스에 사용할 클래스를 작성해야하는데,
모든 모델의 클래스는 models.Model을 상속받는다.
클래스가 만들어 졌으며 테이블의 속성을 만들어야한다.
먼저, 이름을 넣을 name 필드를 만든다.
그리고 숫자의 조합을 넣는 lottos를 넣고 기본값을 설정하자.
한줄 메모장처럼 사용할 text필드와 로또를 한번에 몇개 구매할것인지 입력하는 num_lotto를 만든다.
update_date는 업데이트 된 날짜를 가리킨다.
여기서 인자값으로 들어가는 max_length는 최대의 길이를 나타내며
default는 초기값을 의미한다.
또한 데이터베이스에 저장되는 값에 따라 models.~값이 다르다.
장고에서 지원하는 필드값은 공식 문서를 참조하자
https://docs.djangoproject.com/es/1.10/ref/models/fields/#field-types
1 2 3 4 5 6 7 8 9 10 11 | #로또 번호 생성 및 데이터베이스 저장 def generate(self): self.lottos = "" origin = list(range(1,46)) for _ in range(0, self.num_lotto): random.shuffle(origin) guess = origin[:6] guess.sort() self.lottos += str(guess) +'\n' self.update_date = timezone.now() self.save() | cs |
다음으로 로또 번호를 추천해주는 함수를 만들어야하는데
이는 알고리즘 적인 부분이므로 위의 코드를 그대로 복사하여 GuessNumbers 클래스 안에 넣어준다.
이 코드를 사용하기 위하여 몇가지 추가해야할 사항이있는데
현재의 시간을 추가하기 위해서 timezone이라는 함수를 사용한다.
따라서 상단에 from django.utils import timezone을 추가하자.
또한 임의로 수를 뽑은 랜덤 함수도 사용하기 때문에 import random 도 추가한다.
generate함수를 수행하다가 마지막에 self.save() 함수를 호출하는데, 이 save 함수가
객체를 데이터베이스에 반영하는 함수가 된다.
1 2 3 4 5 | # 마이그레이션 준비 python manage.py makemigrations # 실제로 데이터베이스에 마이그레이션 반영 python manage.py migrate | cs |
이와 같이 모델이 변경될때마다 변경된 사실을 장고에게 알려줘야한다.
따라서 manage.py 가 있는 디렉토리에 가서
$python manage.py makemigrartions 명령을 입력하면
변경사항이 하나로 통합된다.
그 후 $python manage.py migrate를 입력하면 생성되었던 변경 파일이
장고에 적용되면서 우리가 수정하거나 생성한 모델파일이 적용된다.
출처 : 인프런, 파이썬 웹 프로그래밍, Django로 웹 서비스 개발하기
'개발' 카테고리의 다른 글
[Django] lotto - 장고 테스트 코드 작성 (0) | 2017.06.28 |
---|---|
[Django] lotto - admin 사이트에 Model 등록하기 (0) | 2017.06.28 |
[Django] lotto - urls.py와 views 수정 (0) | 2017.06.28 |
[Django] lotto - 프로젝트 및 앱 생성 (0) | 2017.06.28 |
[Django] lotto - 장고와 MTV (0) | 2017.06.28 |
댓글