Model

OneDayDev·2023년 12월 28일
0

Django

목록 보기
8/14

Field

Field Type

  • INTEGER, VARCHAR, TEXT 등 다양한 필드 타입이 존재한다 참고
  • 사용자 지정 모델 필드를 만들 수 있다 참고
  • AutoField보다는 BigAutoField를 사용하는 것이 권장된다.
  • CharField : max_length로 최대 길이 제한
  • TextField : 최대 길이 제한이 없음. 매우 큰 문자열을 저장할 수 있지만 DB 성능은 떨어질 수 있다.
  • TextChoices : 문자열 타입 Enum
  • 숫자형 : IntField, FloatField, DecimalField
  • DateTimeField - PostgreSQL에서는 timestamp, MySQL에서는 datetime(6)
  • DateField - 년, 월, 일만 저장
  • TimeField - 시, 분, 초만 저장
  • DurationField - 시간 차이를 저장

Field Option

  • null : null 저장 허용 설정
  • blank : '' 저장 허용 설정
  • choices : {'value that will be stored in the db':'displayed by the field's form widget, a:b, ...} 또는 models.TextChoices("type", "A B C") 와 같이 사용될 수 있다 더 많은 예시
  • default
  • help_text : help 텍스트 값을 폼 위젯에 전시
  • primary_key : 대표키 설정. 읽기 전용이다. 이미 존재하는 객체의 대표키를 변경하고 저장해도 새롭게 저장한 값이 기존의 값과 같이 저장된다.
  • unique

관계

  • 1대다 : models.ForeignKey(객체, on_delete=models.CASCADE)
  • 다대다 : models.ManyToManyField(객체)를 한쪽 모델에만 정의 해야한다. 일반적으로 수정되어질 오브젝트 안에 위치한다. 참고 through로 매개 테이블을 생성하는 것을 확장 가능성과 직관적인 테이블명을 위해서 권장한다.
  • 1대1 : models.OneToOneField

Meta options

  • managed : Default=False이고 False로 설정되면 해당 모델이 DB 마이그레이션에서 제외된다. 이미 생성된 데이터베이스 테이블에 매핑하고 싶거나 장고가 특정 테이블을 수정하는 것을 방지하고자 할 때 사용.
  • proxy : Default=False, 하나의 테이블을 2개 이상의 모델로 나눠서 표현하고 싶을 때 사용.
  • ordering : 데이터 조회 시 정렬 방법을 설정할 때 사용.
  • db_table : 테이블 명을 직접 작성(권장됨)
  • db_table_comment : 테이블을 설명하는 주석
  • get_latest_by : 장고 쿼리셋의 latest() 호출 시 사용된다. 가장 최근 값의 기준이 되는 필드를 명시할 수 있다.
  • indexes : Field()에 db_index=True 옵션보다 Meta option으로 indexex를 생성하는 것을 추천함.
  • constraints : 제약 조건 models.CheckConstraint를 사용하는 것을 추천함.
  • verbose_name
  • verbose_name_plural
  • abstract : True 로 값을 할당하면 데이터베이스 테이블 생성하지 않고 base 클래스로 사용된다.
  • ...

Migration

makemigrations

  • migrations 폴더의 하위 파일들과 models.py의 차이를 비교하고 일치시키기 위해 새로운 마이그레이션 파일을 생성한다. 꼭 검토할 것

Operations

  • Operation : migration 모듈이 가지는 명령어.
  • CreateModel, DeleteModel, AlterModelTable, AlterModelTableComment, AlterUniqueTogether, AlterIndexTogether ...
  • CreateModel로 테이블을 생성하고 AddField로 새로운 Column을 생성한다.

sqlmigrate

  • sqlmigrate는 시스템에 영향을 주지 않는 단순 검토용 명령어이다.
  • 명령어 사용 : python manage.py sqlmigrate {app} {migration file number}

migrate

  • DB에 마이그레이션을 반영.

사용 가능한 옵션

  • --fake : DB에 반영하지 않고 수행 완료 처리. 사용해야 하는 경우 예시로, 장고의 제어 범위가 아닌 곳에서 DDL 반영하고 장고에 이력으로 기록하기 위해서. 개발 환경에서는 마이그레이션을 사용하지만 실제 서버에서는 DBA가 직접 DDL을 수행하는 경우. 등
  • --plan : migrate 수행 계획을 출력. sqlmigrate와 차이점은 sqlmigrate는 DDL을 직접 출력하지만 --plan은 장고 Operation 수행 계획을 출력한다. DDL을 확인하는 것이 중요해서 sqlmigrate를 주로 사용한다.

showmigrations

  • 마이그레이션 이력 조회.

squashmigrations

  • 마이그레이션 이력 통합. 즉, 여러 마이그레이션 파일을 하나로 합쳐주는 명령어.

migration 파일 custom

마이그레이션 파이을 만들어서 관리하고 싶은 경우
python3 manage.py makemigrations {app} --name="Migration file name" --empty명령을 통해 비어 있는 마이그레이션 파일을 생성할 수 있다.

profile
안녕하세요.

0개의 댓글