티스토리 뷰

예제.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Student(models.Model):
 
    position = (
        ('p1','사원'),
        ('p2','대리'),
        ('p3','계장'),
        ('p4','과장'),
        ('p5','부장'),
    )
 
    dept = (
        ('d1','총무부'),
        ('d2','사업부'),
        ('d3','기획팀'),
        ('d4','홍보실'),
        ('d5','인사과'),
    )
 
    st_id = models.CharField(primary_key=True,max_length=50null=False)
    st_password = models.CharField(max_length=50null=False)
    st_name = models.CharField(max_length=50null=False)
    st_score = None
    sb_name = models.ForeignKey(Subject)
    st_course_start_date = models.DateField(blank=True, null=False)
    st_position = models.CharField(max_length=50,choices=position,default='p1'null=False)
    st_dept = models.CharField(max_length=50,choices=dept,default='d1'null=False)
    st_company = models.CharField(max_length=50null=False)
cs

이 예제는 Student 모델을 정의합니다. 여러개의 필드를 가지는데요 하나씩 살펴보도록 합시다.

모델은 정의한 후에는 INSTALLED_APPS 설정에 모델이 정의된 app을 추가해주어야 합니다. 이전에 올린 포스팅에서 blog 라는 app을 Setting.py의 INSTALLED_APPS에 등록한것과 같습니다.



제가 만든 student 클래스가 들어있는 app의 이름은 maketest입니다. 따라서 INSTALLED_APPS에 다음과 같이 등록을 했습니다. 여러분은 여러분의 app을 위와같이 등록하면 되겠습니다. 터미널에서 makemigrations와 migrate를 잊지말고 하시고 다음으로 넘어가겠습니다.

모델을 정의할 때 가장 중요한 부분은 바로 필드 선언입니다. 이때, 모델 클래스에서 기본으로 제공하는 API메서드들의 이름(clean, save, delete등)과 같이 겹치지 않도록 주의하세요.

이제 필드타입에 대하여 알아보겠습니다.

모델에 필드를 선언할때, 각각의 필드는 Field 클래스의 인스턴스여야 합니다. 각 필드의 클래스 타입을 통해 DJango는 아래과 같은 내용을 자동적으로 판단하여 동작할 수 있게 됩니다.

- 데이터베이스 컬럼 타입. ex) integer, varchar

- DJango form을 이용하여 모델을 HTML 위젯으로 렌더링 할때 각 필드를 어떻게 표현할지.

ex) <input type="text">, <select>

- DJango admin 페이지나 자동 생성된 form에서 수행될 최소한의 유효성체크


DJango는 여러가지 내장된 필드 타입을 제공하며, 직접 만들어 사용할 수도 있습니다.

이제 각각의 필드 옵션에 대하여 알아봅시다.


null

값이 True 이면, DB상의 해당 컬럼에 NULL값을 할당할 수 있습니다. 즉, 데이터베이스의 NOT NULL 제약과 관련이 있는 옵션입니다.

blank

값이 True이면, 필드값을 입력하지 않아도 됩니다. 기본값은 False입니다.

null옵션과는 다릅니다. null은 DB상의 not null제약과 연관된 옵션이라고 했을때, blank 옵션은 DB의 어떤 제약과도 관련이 없습니다. 즉 blank 옵션을 설정한다고 해서 DB상에 어떤 제약이 걸리지는 않습니다. 다만, 유혀성 검증과 연관이 있습니다. DJango는 복잡한 구현 없이 모델에 대한 HTML 폼을 쉽게 생성할 수 있도록 도와주는데, 이 폼 검증시에 blank 옵션이 False인 필드는 필수 입력 필드로 처리됩니다.

choice

enum과 같이 필드에 저장할 수 있는 값이 제한적인 경우에 사용할 수 있습니다. 옵션값은 아래예제와 같이 2중 튜플(또는 리스트)로 설정해야 합니다.

1
2
3
4
5
6
7
    dept = (
        ('d1','총무부'),
        ('d2','사업부'),
        ('d3','기획팀'),
        ('d4','홍보실'),
        ('d5','인사과'),
    )
cs

이때, 내부의 튜플은 2개의 요소를 가지는데 하나는 실제 DB에 저장될 값이고, 두번째는 admin페이지나 폼에서 표시할 이름입니다. choices 옵션이 설정된 필드의 값은 튜플의 첫번째 요소값이며, 모델 객체에 대해 get_필드명_display() 메서드를 호출하면 튜플의 두번째 요소값을 얻을 수 있습니다. 참고로 display()메서드는 DJango에 의해 자동 생성 됩니다.

default

해당 필드의 기본값을 정의합니다. 옵션값은 단순히 값도 될 수 있고 함수도 될 수 있습니다. 만약 함수를 옵션값으로 설정할 경우 새로운 모델 객체를 만들때마다 해당 함수가 호출됩니다.

primary_key

값이 True이면, 해당 필드를 모델의 primarykey로 정의합니다.

이때 주의할 점이 있습니다. 기존 모델 객체에 primary key 필드값을 변경하고 저장하는 경우, 기존 모델 객체의 primary key 필드값이 바뀌는 것이 아니라, 새로운 모델 객체가 생성됩니다. 물론 기존의 모델객체는 DB상에서 지워지지 않습니다.

이외에도 여러가지 필드 타입이 있는데, 언급하지 않은 내용중 중요한 내용은 Relationships에 대한 내용입니다. 추후 자료를 보충하도록 하겠습니다.









댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함