Django Model

MMM._.MMM·2024년 12월 30일

Django

목록 보기
4/4

Django Model Info

데이터베이스 구조를 Python 클래스로 정의하는 핵심 파일입니다.

  • model = DB의 테이블
  • Field = DB의 컬럼

Field Type

Field Type'들'

  • CharField: 제한된 문자열
  • TextField: 긴 텍스트
  • DateTimeField: 날짜와 시간
  • DateField: 날짜
  • IntegerField: 정수
  • ForeignKey: 다른 모델과의 관계
  • AutoField: IntegerField와 기본적으로 동일하나, 자동적으로 증가하는 field
  • BooleanField: true/false 값을 저장하는 필드
  • URLField: CharField와 동일하나, URLValidator를 사용 BUT url 패턴에 매칭이되는 Regex(정규식)이 조건으로 걸려 있다.
  • EmailField: URL과 동일
  • UUIDField: "Universal Unique Identifier" -공식문서확인-

Field Options

  1. 기본 필드 옵션
    - null
    데이터베이스에서 NULL 값 허용 여부를 결정합니다. 기본값은 False이며, 문자열 기반 필드에서는 사용을 피하는 것이 좋습니다.
    - blank
    폼 유효성 검사에서 빈 값 허용 여부를 결정합니다. null과는 다른 개념으로, 데이터베이스가 아닌 검증 단계에서 동작합니다.
    - choices
    필드에 대한 선택 옵션을 제한합니다.
    - default
    필드의 기본값을 설정합니다. 값이나 호출 가능한 객체를 지정할 수 있으며, 새 객체가 생성될 때마다 호출됩니다.

  2. 고급 필드 옵션
    - unique
    해당 필드의 값이 테이블 전체에서 고유해야 함을 지정합니다. 중복된 값을 방지하고자 할 때 사용합니다.
    - primary_key
    해당 필드를 모델의 기본 키로 지정합니다. True로 설정하지 않으면 Django가 자동으로 ID 필드를 생성합니다.
    - db_index
    해당 필드에 대해 데이터베이스 인덱스를 생성할지 여부를 결정합니다.
    - help_text
    폼 위젯과 함께 표시될 도움말 텍스트를 지정합니다. 문서화에 유용합니다.
    이러한 필드 옵션들을 적절히 조합하여 사용하면 데이터베이스 스키마를 더욱 정교하게 설계할 수 있습니다.

Meta Options

내부 클래스 Meta를 사용해서 모델Meta데이터를 제공합니다.
모델 메타 데이터는 정렬 순서지정, 데이터베이스 테이블 이름 or 사람이 읽을 수 있는 복수 이름과 같은 -필드가 아닌 모든것~!-이라고 보면 됩니다.

💡 Model에 Meta를 추가하는 것은 선택사항입니다.

Manager 속성

objects 속성

  • 모든 Django 모델은 기본적으로 objects라는 Manager 속성을 가집니다.
  • Manager는 데이터베이스 쿼리 작업을 위한 인터페이스를 제공합니다.
  • Manager는 모델 클래스를 통해서만 접근 가능하며, 인스턴스를 통해서는 접근할 수 없습니다.

주요 메서드

str() 메서드

  • 모델 인스턴스의 문자열 표현을 반환하는 Python 매직 메서드입니다.
  • 관리자 페이지나 콘솔에서 객체를 표시할 때 사용됩니다.

get_absolute_url()

  • 객체의 URL을 계산하는 방법을 Django에 알려주는 메서드입니다.
  • 관리자 인터페이스에서 사용되며, 객체의 고유 URL이 필요할 때 호출됩니다.

메서드 오버라이딩

save() 메서드 커스터마이징

python
def save(self, *args, **kwargs):
    do_something()
    super().save(*args, **kwargs)  # 실제 저장 메서드 호출
    do_something_else()
  • 객체 저장 시 추가 동작을 수행하기 위해 자주 오버라이딩됩니다.
  • super().save()를 호출하지 않으면 실제 데이터베이스 저장이 이루어지지 않습니다.

모델 상속

Django는 세 가지 타입의 모델 상속을 제공합니다:

추상 기본 클래스

  • 여러 모델에서 공통 필드를 재사용할 때 사용
  • Meta 클래스에 abstract = True 설정이 필요

다중 테이블 상속

  • 각 모델이 자체 데이터베이스 테이블을 가짐
  • 부모-자식 관계가 OneToOneField로 자동 연결됨

프록시 모델

  • 모델의 Python 레벨 동작만 수정할 때 사용
  • 새로운 테이블을 생성하지 않음
profile
아....평화롭게 오카네모찌 되고JOB다...

0개의 댓글