๐field type
from django.db import models
class CharField(max_length=None, **options)
# ex
name = models.CharField(max_length=20)
ํ์ ์ธ์
ํ ์คํธ ์์ด ๋ง์ ๊ฒฝ์ฐ
class TextField(**options)
# ex
description= models.TextField()
4 Bytes๊น์ง ์ ์ ๊ฐ
class IntegerField(**options)
# ex
order_id = models.IntegerField(default=0)
๊ณ ์ ์์์ ์ดํ์ ์ญ์ง์
class DecimalField(max_digits=None, decimal_places=None, **options)
# ex
price = models.DecimalField(max_digits=11, decimal_places=2)
ํ์ ์ธ์
class FloatField(**options)
8 Bytes๊น์ง ์ ์ ๊ฐ
class BigIntegerField(**options)
2 Bytes๊น์ง ์ ์ ๊ฐ
class SmallIntegerField(**options)
# ex
quantity = models.SmallIntegerField()
class PositiveIntegerField(**options)
class PositiveBigIntegerField(**options)
class PositiveSmallIntegerField(**options)
์๋์ผ๋ก ์ฆ๊ฐํ๋ ์ ์ ํ๋
class AutoField(**options)
1 to 9223372036854775807 ๊น์ง 1์ฉ ์๋ ์ฆ๊ฐ
class BigAutoField(**options)
1 to 32767๊น์ง 1์ฉ ์๋ ์ฆ๊ฐ
class SmallAutoField(**options)
true/false ํ๋
default๊ฐ ์ ํด์์ง ์์ ๊ฒฝ์ฐ default๊ฐ์ None
class BooleanField(**options)
# ex
is_exit = models.BooleanField(default=False)
class DateField(auto_now=False, auto_now_add=False, **options)
# ex
updated_at = models.DateField(auto_now=True)
created_at = models.DateField(auto_now_add=)
auto_now
๊ฐ์ฒด๊ฐ ์ ์ฅ๋ ๋ ํ์ฌ ๋ ์ง๋ฅผ ์ ์ฅ
Model.save()๊ฐ ๋ ๋ ์๋์ผ๋ก ์
๋ฐ์ดํธ ๋๊ณ , QuerySet.update()๊ฐ์ ๊ฒฝ์ฐ์๋ ์
๋ฐ์ดํธ ๋์ง ์๋๋ค.
auto_now_add
๊ฐ์ฒด๊ฐ ์ฒ์ ์ ์ฅ๋ ๋ ํ์ฌ ๋ ์ง๋ฅผ ์ ์ฅ
auto_now_add
, auto_now
, default
์ต์
์ ์ํธ ๋ฐฐํ์ ์ด๋ผ, ์ด๋ฌํ ์ต์
์ ์กฐํฉํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
DateField + ์๊ฐ๊ฐ์ง ์ ์ฅ
class DateTimeField(auto_now=False, auto_now_add=False, **options)
# ex
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class EmailField(max_length=254, **options)
EmailValidator๋ฅผ ์ฌ์ฉํ์ฌ ์ ํจํ ๋ฉ์ผ์ฃผ์์ธ์ง ํ์ธํ ์ ์๋ค.
๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํน์ ํ๋
๋ฐ์ดํธ๋ง ํ์ฉ
๋ฐ์ดํฐ๋ ์ ์ฅ์ serialize๋๋ค.
๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฏ๋ก์ด ํ๋๋ ํํฐ์์ ์ฌ์ฉํ ์ ์๋ค.
class BinaryField(max_length=None, **options)
# ex
my_binary_data = models.BinaryField()
๊ธฐ๊ฐ์ ์ ์ฅํ๊ธฐ์ํ ํ๋
class DurationField(**options)
class FileField(upload_to=None, max_length=100, **options)
ํ์ผ ์
๋ก๋ ํ๋
primary_key ๋งค๊ฐ๋ณ์๋ ์ง์ โ
ํ์ผ์์คํ
์์ ํน์ ํ ๋๋ ํ ๋ฆฌ์ ํ์ผ ์ด๋ฆ์ผ๋ก ์ ํํ๋ค.
์ธ๊ฐ์ง ํน๋ณ์ธ์๊ฐ ์๊ณ ์ฒซ๋ฒ์งธ ์ธ์๋ ํ์์ด๋ค.
class FilePathField(path='', match=None, recursive=False, allow_files=True, allow_folders=False, max_length=100, **options)
ํ์ ์ธ์path
FilePathField๊ฐ ์ ํํด์ผํ๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์ํ ์ ๋ ๊ฒฝ๋ก
ex) "home/imgs"
match
ํ์ผ์ด๋ฆ์ ํํฐ๋งํ ๋ ์ฌ์ฉํ ๋ฌธ์์ด๋ก ๋ ์ ๊ทํํ์
์ ๊ทํํ์์ ์ ์ฒด ๊ฒฝ๋ก๊ฐ ์๋ ๊ธฐ๋ณธ ํ์ผ์ด๋ฆ์ ์ ์ฉ
recursive
True/False (default = False)
path์ ๋ชจ๋ ์๋ธ ๋๋ ํ ๋ฆฌ๊ฐ ํฌํจ๋์ด์ผํ๋์ง ์ฌ๋ถ
allow_files
True/False (default = True)
์ง์ ๋ ์์น์ ํ์ผ์ ํฌํจํ ์ง ์ฌ๋ถ
allow_files, allow_folders ๋ ์ค ํ๋๋ True์ฌ์ผ ํ๋ค.
allow_folders
True/False (default = True)
์ง์ ๋ ์์น์ ํด๋๋ฅผ ํฌํจํ ์ง ์ฌ๋ถ
class ImageField(upload_to=None, height_field=None, width_field=None, max_length=100, **options)
# ex
photo = models.ImageField(blank=True)
profile_pic = models.ImageField(upload_to="jimin/profile_pic")
# ์ ์ฅ๊ฒฝ๋ก : `ROOT/jimin/profile_pic/xxxx.jpg` ๊ฒฝ๋ก์ ์ ์ฅ
# DBํ๋ : `URL/jimin/profile_pic/xxxx.jpg` ๋ฌธ์์ด ์ ์ฅ
photo = models.ImageField(blank=True, upload_to="blog/%Y/%m/%d")
# ์ ์ฅ๊ฒฝ๋ก : `ROOT/jimin/2022/01/05/xxxx.jpg` ๊ฒฝ๋ก์ ์ ์ฅ
# DBํ๋ : `URL/jimin/2022/01/05/xxxx.jpg` ๋ฌธ์์ด ์ ์ฅ
์ด๋ฏธ์ง ์ ์ฅ์ ์ง์ํ๋ ๋ชจ๋ธ ํ๋ (FileField ์์)
๋ฌธ์์ด ํ์์ IPv4๋ IPv6 ์ฃผ์
class GenericIPAddressField(protocol='both', unpack_ipv4=False, **options)
JSON ์ธ์ฝ๋ฉ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ์ํ ํ๋
class JSONField(encoder=None, decoder=None, **options)
# ex
from django.contrib.postgres.fields import JSONField
from django.db import models
class User(models.Model):
metadata = JSONField()
class Post(models.Model):
data = models.JSONField(default='{}')
์๋ฏธ์๋ URL์ ๋ง๋๋๋ฐ ์ฌ์ฉ
???
URL์ ์ ์ฅํ๊ธฐ ์ํ CharField์ด๋ค.
URLValidator๋ฅผ ์ด์ฉํ์ฌ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ํ ์ ์๋ค.
class URLField(max_length=200, **options)
๊ณ ์ ํ ์๋ณ์๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ํ๋
class UUIDField(**options)