django-4. 모델 - 심화
January 28, 2018
테이블 이름
Django는 자동으로 생성 된 데이터 베이스 엑세스 api를 제공한다. 각 모델은 django.db.models.Model 이라는 하위 클래스임. 그래서 models.py에서 models를 import 함(from django.db import models).
from django.db import models class Person(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30)
위와 같이 모델을 만들면 데이터 베이스에는 blogapp이름_person 이라는 테이블이 생성 된다. 이는 메타데이터에서 자동으로 파생 되지만 재정의 할 수 있음.
필드
django에는 수십가지의 model필드가 있음. 참조할 수 있는 모델 필드 보기
그중에 자주 사용하는 몇가지만 정리.
AutoField (integerField)
django는 모델을 생성하면 id 필드를 primary_key로 생성해줌. (필요한 경우 재정의 할 수 있음.)
id = models.AutoField(primary_key=True)
비슷한 애들.. : BigAutoField, BigIntegerField
BooleanField
- ture, false를 받음.
- null값을 받을 필요가 있으면 NullBooleanField를 대신 사용
- 기본 위젯은 checkbox
CharField(max_length=없음, options)
- 문자열필드
- 많은양의 텍스트를 사용하려면 TextField
- 기본위젯 TextInput
CharField.max_length
- 필드의 최대길이 유효성 검사에서 사용
DateField ( auto_now = false, auto_now_add = false, options )
- DateField.auto_now : 객체가 저장될 때 마다 자동으로 설정
- DateField.auto_now_add : 객체 생성 시 필드를 설정함.
- auto_now와 auto_now_add는 함께 사용하지 않도록 함.
- 기본위젯 TextInput
EmailField ( max_length = 254 , ** options )
- max_length 유효성 검사에 사용 됨.
TextField ( options )
- 기본 위젯 Textarea
- max_length 속성을 지정하면 위젯에는 반영되지만 데이터베이스 스준에서는 적용되지 않음.
관계필드
ForeignKey ( to , on_delete , ** options )
manufacturer = models.ForeignKey( 'production.Manufacturer', on_delete=models.CASCADE, )
- N:1 관계
-
on_delete
- CASCADE() (외래키가 포함된 객체도 함께 삭제)
- PROTECT() (ProtectedError의 하위 클래스를 올려서, 참조된 개체의 삭제를 방지) < - 무결성 에러
- SET_NULL() (외래키를 null로 설정)
- SET_DEFAULT()
- SET()
- DO_NOTHING()
ManyToManyField
- N:M 관계 (다대다)
- 장고는 이를 표현하기 위해서 중간 조인 테이블을 생성함.
.. 작성중.. ㅌ