CharField
문자열을 저장하는 필드로 max_length로 최대 길이를 제한할 수 있다. 더 큰 문자열을 다룰 경우 TextField를 사용한다.
DateField
datetime.date를 저장하는 필드이다.
auto_now=True를 인자로 추가하면 Model.save로 저장할 때마다 현재 시간으로 갱신된다(QuerySet.update로는 갱신되지 않는다). updated_at 필드에 주로 사용한다.
auto_now_add=True를 인자로 추가하면 처음 객체가 생성될 때 현재 시간으로 설정된다. 주로 created_at 필드에 사용한다.
위 두 인자를 사용하면 editable=False, blank=True로 설정된다.
DateTimeField
datetime을 저장하는 필드로 인자의 사용방법은 위 DateField와 같다.
DecimalField
Decimal을 저장하는 필드로 DecimalValidator로 검사한다. 전체 숫자의 최대 자릿수인 max_digit, 소수점 자릿수인 decimal_place 인자를 필수로 받는다.
DurationField
timedelta에 해당하는 필드로 PostgreSQL의 interval에 해당한다.
EmailField
CharField와 같지만 EmailValidator로 검사한다. 기본으로 max_length=254이다.
FileField
파일을 업로드하는 필드로 upload_to로 저장할 장소를 선택할 수 있다.
FloatField
부동소수점을 표현하는 float에 해당한다.
ImageField
FileField의 모든 속성을 상속받고, 추가로 저장된 파일이 이미지인지 검사한다. max_length는 기본으로 100이다.
IntegerField
32bit integer를 표현한다.
GenericIPAddressField
인자로 protocol(both, IPv4, IPv6)을 받아 문자열이 이 ip에 해당하는지 검사한다.
NullBooleanField
BooleanField에 인자로 null=True를 넘긴 필드로 deprecated 될 예정이라 BooleanField 사용을 권장한다.
PositiveIntegerField
IntegerField와 같지만 0 또는 양수(2147483647 이하) 임을 보장한다.
PositiveSmallIntegerField
PositiveIntegerField와 같지만 더 작은 범위를 가진다. database마다 다르지만 0부터 32767까지는 보장한다.
SlugField
주로 url에 사용되는 문자, 숫자, -, _ 만을 허용한다. db_index가 true로 생성되고 allow_unicode 속성(기본값은 False)으로 unicode까지 저장할 수 있다.
SmallAutoField
IntegerField와 같지만 더 작은 범위를 가진다. database마다 다르지만 -32768부터 32767까지는 보장한다.
TextField
CharField보다 큰 텍스트를 다룬다. max_length 인자로 widget까지는 제어할 수 있지만 실제로 model, database까지 제어되지는 않는다.
TimeField
time에 해당하는 필드로 인자의 사용방법은 위 DateField와 같다.
URLField
URL을 처리하는 CharField로 URLValidator로 검사한다. max_length는 기본으로 200이다.
UUIDField
UUID에 해당하는 필드로 PostgreSQL에서는 uuid, 나머지 database에서는 char(32)에 해당한다. AutoField로 자동 증가하는 id 대신에 키를 사용하는 방법으로도 사용된다.
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
Relationship Field
ForeignKey
외래 키를 지정하는 것을 통해 다대일 관계를 정의한다.
어떤 주인이 여러 개의 상품을 가질 수 있고, 상품은 한 명에게만 속할 때 아래와 같이 ForeignKey를 사용한다.
class Product(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE)
유저의 필드에 추천인을 넣는 경우처럼 자기 자신 모델을 참조하는 경우에는 self로 표현한다.
recommender = models.ForeignKey('self', on_delete=models.CASCADE)
ForeignKey로 설정하면 실제 database에는 column이름에 _id가 추가되어 owner_id, recommender_id로 저장된다. python 코드에서는 model로 접근하기 때문에 별도의 작업을 할 필요는 없다.
ManyToManyField
다대다 관계를 정의한다. django는 이 관계를 테이블을 이용해서 유지시키는데, through 옵션으로 custom 하게 바꿀 수 있다. 단순한 연결관계가 아닌 추가적인 데이터가 필요한 경우 사용한다.
class Person(models.Model):
name = models.CharField(max_length=128)
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')
class Membership(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE)
group = models.ForeignKey(Group, on_delete=models.CASCADE)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
OneToOneField
일대일 관계를 정의한다. unique=True인 ForeignKey와 비슷하다. 차이점은 역참조 할 때 발생한다. unique=True라서 ForeignKey의 역참조도 결괏값은 한 개가 나오지만 QuerySet으로 반환되고, OneToOneField는 객체가 반환된다.
'개발 > Django, DRF' 카테고리의 다른 글
Django ORM 관련 꼭 봐야할 글 (0) | 2022.10.13 |
---|---|
[Django] DRF(장고 rest framework)와 REST API (0) | 2022.04.19 |
Django 주소 뒤에 슬래쉬 붙이거나 없애기 (0) | 2022.03.18 |
[Django] Error: That port is already in use. - 해결 방법 (0) | 2022.03.02 |
Django 템플릿에서 newline 을 br 태그로 변경 (0) | 2022.01.12 |
Django 마이그레이션 자주 쓰는 명령어 (0) | 2022.01.10 |