Django 모델은 "django.db.models.Model" 의 파생 클래스이며,
모델의 필드는 클래스의 멤버로 표현되는 테이블의 필드에 해당한다
테이블의 필드는 클래스 멤버 변수로 표현되는데 이 때 클래스 멤버변수는
이름에 해당하는 값을 가지는것이 아니라 필드의 메타 데이터를 정의한다
자주 사용하는 필드값에 대한 정리
CharField(max_length=None, **options
) : small to large size string을 위한 필드
options
TextField(**options
) : large text field, Textarea 위젯에 대응한다
max_length 옵션을 지정하면 Textarea 위젯에 반영된다
IntegerField(**options
) : -2147483648 부터 2147483647 사이의 값(signed int)을 위한 필드
DecimalField(max_digits=None, decimal_places=None, **options
) : 고정 소수점 값을 위한 필드
options
BooleanField(**options
) : true/false 필드
Null/true/false 필드를 사용하고 싶을 경우 NullBooleanField를 사용한다
DateTimeField(auto_now=False, auto_now_add=False, **options
) : 날짜와 시간을 위한 필드
내부적으로 파이썬의 datetime.datetime를 호출한다
options
BinaryField(**options
) : raw binary를 저장하는 데이터 타입으로 제한된 기능성을 갖는데
예를 들어 객체에 대한 filter를 사용할수 없다
FileField(upload_to=None, max_length=100, **options
) : 파일 업로드를 위한 필드
options
ImageField(upload_to=None, height_field=None, width_field=None, max_length=100, **options
) :
파일 필드를 상속받는 필드이나 객체가 유효한 이미지인지 검증한다
ImageField의 객체는 DB안에서 max_length=100인 varchar 필드이다
options
save() : test_table.save()
save() 메서드가 호출되면, SQL의 INSERT이 생성되고 실행되어 테이블에 레코드가 추가된다.
Django는 디폴트로 모든 Django 모델 클래스에 대해 "objects" 라는
Manager (django.db.models.Manager) 객체를 자동으로 추가한다
이 objects 매니저를 통해 SQL의 SELECT 구문을 구현할 수 있다
all() : 테이블에 존재하는 모든 레코드를 가져오는 메소드
get() : 하나의 레코드만을 가져오기 위한 메소드
filter() : 특정 조건에 맞는 레코드를 가져오기 위한 메소드
exists() : 객체가 존재하는지 확인하는 메소드
ex ) rows = Feedback.objects.filter(name='Kim')
exclude() : 특정 조건에 맞는 레코드를 제외하는 메소드
ex ) rows = Feedback.objects.exclude(name='Kim')
count() : 레코드의 갯수를 세어 리턴하는 메소드
order_by() : 레코드를 인자에 따라 정렬하기 위한 메소드
ex ) rows = Feedback.objects.order_by('id', '-createData')
위와 같이 호출하면 id를 통한 올림차순, createData필드를 통해 내림차순으로 정렬된다
distinct() : 대상 객체의 중복값을 제거한다
ex) rows = Feedback.objects.distinct('name')
위와 같이 호출하면 Feedback 객체에서 'name' 필드가 중복값을 가진 레코드를 제외하고 가져온다
first() : 객체에서 첫번째 레코드를 리턴하는 메소드
ex) rows = Feedback.objects.order_by('name').first()
위와같이 호출하면 'name' 필드로 정렬했을때 첫번째 레코드를 리턴한다
last() : 객체의 마지막 레코드를 리턴하는 메소드
위 SELECT 구문에 해당하는 Query method들은 데이터를 직접 리턴하는것이 아니라
QuerySet이라는 객체를 리턴하는데 이로 인해 여러 메소드들을 체인처럼 연결하여 사용할 수 있다
row = Feedback.objects.filter(name='Kim').order_by('-id').first()
save() 메소드와 같이 객체에서 delete() 메소드를 실행한다