Django Model 정의하기

Django Model 정의하기

Django 의 웹 application은 Model이라는 파이썬 객체를 통해 데이터에 접속하고 관리한다. 모델은 저아된 데이터의 구조를 정의한다. 그것에는 필드타입, 데이터의 최대크기, 기본값, 선택 리스트옵션 등등이 있다.

모델을 코딩하기전에 어떤 데이터를 저장할 것인지, 그리고 다른 객체(object)들에 대한 관계를 어떻게 지정할 것인지 생각해봐야 한다. 모델을 디자인 할때는 각각의 객체마다 분리된 모델을 가지는 것이 타당하다. (내용, 저자 등)

모델과 필드를 결정하고 나면 OneToOneField, ForeignKey, ManyToManyField 관계에 대하여 생각해야 한다.

-모델의정의

모델은 해당 어플리케이션 하위에 있는 models.py에서 정의된다. 이들은 django.db.models.Model의 서브 클래스로 구현되며 필드, 메소드, 메타데이터를 포함할 수 있다.

-필드(Fields)

모델은 모든 타입의, 임의의 숫자의 필드를 가질 수 있다. 각각의 필드는 우리 데이터베이스 목록에 저장하기 원하는 데이터 열(colum)을 나타낸다. 각각의 데이터베이스 레코드( 행,row)는 각 필드 값들 중 하나로 구성되어 있다.

예시)

my_field_name = models.CharField(max_length = 20, help_text = 'Enter field documentation')

이 예제는 하나의 필드를 가지고 있는 models.CharField 타입이다. 즉, 이 필드가 영숫자 문자열을 포함한다는 뜻이다. 필드타입들은 특정한 클래스를 사용하여 등록되며, HTML 양식(form)에서 값을 수신할 때 사용할 유효성 검증 기준과 함께 데이터베이스에서 데이터를 저장하는데 사용되는 레코드의 타입을 결정한다. 또한 필드타입은 필드가 어떻게 저장되고 사용될지 지정하는 인수를 사용할 수 있다. 이 예제에서는 필드에 두가지 인수를준다.

max_length=20은 이 필드 값의 최대길이를 20으로 한정하고, help_text는 이 값이 HTML 양식에서 사용자에게 입력 될 때 어떤 값을 입력해야하는지 알려주는 텍스트 라벨을 제공한다.

-일반적인 필드의 인수

help_text : HTML양식(form)에 대해 텍스트 라벨을 제공한다.

: HTML양식(form)에 대해 텍스트 라벨을 제공한다. verbose_name : 필드 라벨안에서 사용되는 사람이 읽을 수 있는 필드이름이다. 지정하지 않아도 기본 verbose_name을 필드 이름으로 부터 유추한다. (필드이름은 쿼리 및 탬플릿에서 이를 참조하는데 쓴다. 필드는 또한 인수로 지정된 라벨을 가지거나 필드 변수 이름의 첫자를 대문자로 바꾸고 기본 라벨을 추정할 수 있다. )

: 필드 라벨안에서 사용되는 사람이 읽을 수 있는 필드이름이다. 지정하지 않아도 기본 verbose_name을 필드 이름으로 부터 유추한다. (필드이름은 쿼리 및 탬플릿에서 이를 참조하는데 쓴다. 필드는 또한 인수로 지정된 라벨을 가지거나 필드 변수 이름의 첫자를 대문자로 바꾸고 기본 라벨을 추정할 수 있다. ) default : 필드를 위한 기본값이다. 이것은 값 또는 호출 가능한 객체일수 있다. 이때 객체는 새로운 레코드가 생성될땜다 호출된다.

: 필드를 위한 기본값이다. 이것은 값 또는 호출 가능한 객체일수 있다. 이때 객체는 새로운 레코드가 생성될땜다 호출된다. null : True로 설정하면 장고는 빈 NULL 값을 필드를 위한 데이터베이스에 저장한다.(CharField는 대신 빈문자열 저장)기본 값은 False이다.

: True로 설정하면 장고는 빈 NULL 값을 필드를 위한 데이터베이스에 저장한다.(CharField는 대신 빈문자열 저장)기본 값은 False이다. blank : True로 설정하면, Field는 form안에서 비워두는것이 허락된다. 기본 값은 False 이며, 이것은 장고의 양식검증이 값을 입력하도록 강제한다는 것이다. null=True와 함께 사용된다. blank를 허락할때 데이터베이스에서도 공백값을 표기할 수 있어야하기때문이다.(회원가입의 필수정보 기입란에 쓰면 좋을거같다)

: True로 설정하면, Field는 form안에서 비워두는것이 허락된다. 기본 값은 False 이며, 이것은 장고의 양식검증이 값을 입력하도록 강제한다는 것이다. null=True와 함께 사용된다. blank를 허락할때 데이터베이스에서도 공백값을 표기할 수 있어야하기때문이다.(회원가입의 필수정보 기입란에 쓰면 좋을거같다) choices " 필드를 위한 선택들의 모임이다. 이 인수가 제공된다면, 대응하는 기본 양식(form) 위젯은 표준 텍스트 필드가 아닌 선택 항목을 가진 선택상자가된다.

" 필드를 위한 선택들의 모임이다. 이 인수가 제공된다면, 대응하는 기본 양식(form) 위젯은 표준 텍스트 필드가 아닌 선택 항목을 가진 선택상자가된다. primary_key : True로 설정하면 현재 필드를 모델의 primary key로 설정한다.(primary key는 모든 다른 테이블 레코드를 고유하게 확인하도록 지정된 특별한 데이터베이싀 열이다.) primary로 지정된 필드가 없다면 장고가 자동적으로 이 목적의 필드를 추가한다.

- 일반적인(common) 필드타입

CharField : 작거나 중간 크기의 고정된 길이의 문자열을 정의할 때 사용한다. max_length 로 최대 길이를 정해줘야한다.

작거나 중간 크기의 고정된 길이의 문자열을 정의할 때 사용한다. max_length 로 최대 길이를 정해줘야한다. TextField : 임의의 긴 문자열에 사용된다. max_length를 지정해야할 수도 있지만, 필드가 form(양식) 안에 표시될 때만 지정하면 된다.

임의의 긴 문자열에 사용된다. max_length를 지정해야할 수도 있지만, 필드가 form(양식) 안에 표시될 때만 지정하면 된다. IntergerField : 정수값(모든 숫자)를 저장하는 필드다. 또한 form(양식)에 입력된 값이 정수임을 검증한다.

정수값(모든 숫자)를 저장하는 필드다. 또한 form(양식)에 입력된 값이 정수임을 검증한다. DataField와 DataTimeField : 날짜와 날짜시간 정보를 저장, 표현하는데 사용된다.(각자 파이썬 datatime.date, datetime.datetime 객체 로) 이 필드들은 추가적으로 (서로 독점적인) auto_now = True (모델이 저장될때마다 필드를 현재 날짜로 설정, auto_now_add (모든 모델이 처음 생성되었을 때만 날짜를 설정), 그리고 default (사용자에 의해 변경될 수 있는 기본 날짜를설정하기 위해) 매개변수를 선언할 수 있다.

날짜와 날짜시간 정보를 저장, 표현하는데 사용된다.(각자 파이썬 datatime.date, datetime.datetime 객체 로) 이 필드들은 추가적으로 (서로 독점적인) (모델이 저장될때마다 필드를 현재 날짜로 설정, (모든 모델이 처음 생성되었을 때만 날짜를 설정), 그리고 (사용자에 의해 변경될 수 있는 기본 날짜를설정하기 위해) 매개변수를 선언할 수 있다. EmailField : 이메일 주소를 저장하고 검증하기 위해사용

이메일 주소를 저장하고 검증하기 위해사용 FileField와 ImageField : 각각 파일과 이미지를 업로드하기 위해 사용 (ImageField

from http://20210916start.tistory.com/164 by ccl(A) rewrite - 2021-11-10 01:27:04