~DateTimeField ๋?~
1. DateTimeField ์ ์
`DateTimeField`๋ Django ๋ชจ๋ธ์์ ๋ ์ง์ ์๊ฐ์ ์ ์ฅํ๋ ํ๋์ด๋ค
์ด ํ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ `DATETIME` ์ ํ์ ๋งคํ๋๋ฉฐ, Python์ `datetime.datetime` ๊ฐ์ฒด๋ก ์ฒ๋ฆฌ๋๋ค
๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
๋ชจ๋ธ ์ ์
from django.db import models
class Event(models.Model):
name = models.CharField(max_length=100)
event_date = models.DateTimeField()
๋ง์ด๊ทธ๋ ์ด์ ์ดํ ๋ฐ์ดํฐ ์ ์ฅ
from datetime import datetime
from myapp.models import Event
event = Event(name="Conference", event_date=datetime(2025, 1, 15, 14, 30))
event.save()
2. ์ฃผ์ ๋งค๊ฐ๋ณ์
1) `auto_now_add`
- ๋ ์ฝ๋๊ฐ ์ฒ์ ์์ฑ๋ ๋, ํ์ฌ ๋ ์ง์ ์๊ฐ์ ์๋์ผ๋ก ์ ์ฅํ๋ค
- ์ดํ ์์ ์์๋ ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์๋๋ค
์์ :
event_date = models.DateTimeField(auto_now_add=True)
์ฌ์ฉ ์์ : ์์ฑ๋ ์๊ฐ(์: ๋ ์ฝ๋ ์์ฑ ์๊ฐ)์ ์๋์ผ๋ก ์ ์ฅํ๋ ค๋ ๊ฒฝ์ฐ
2) `auto_now`
- ๋ ์ฝ๋๊ฐ ์ ์ฅ๋ ๋๋ง๋ค ํ์ฌ ๋ ์ง์ ์๊ฐ์ผ๋ก ๊ฐ์ ์๋์ผ๋ก ๊ฐฑ์ ํ๋ค
์์ :
updated_at = models.DateTimeField(auto_now=True)
์ฌ์ฉ ์์ : ๋ง์ง๋ง ์์ ์๊ฐ์ ๊ธฐ๋กํ๋ ค๋ ๊ฒฝ์ฐ
3) `null`
- ๊ธฐ๋ณธ๊ฐ: `False`
- `True`๋ก ์ค์ ํ๋ฉด ํด๋น ํ๋์ `NULL` ๊ฐ์ ํ์ฉํ๋ค
์์ :
event_date = models.DateTimeField(null=True)
4) `blank`
- ๊ธฐ๋ณธ๊ฐ: `False`
- `True`๋ก ์ค์ ํ๋ฉด ๊ด๋ฆฌ์(admin) ๋๋ ํผ์์ ํด๋น ํ๋ ์ ๋ ฅ์ ํ์๋ก ์๊ตฌํ์ง ์๋๋ค
์์ :
event_date = models.DateTimeField(blank=True)
5) `default`
- ํ๋์ ๊ธฐ๋ณธ๊ฐ์ ์ค์ , ์ฃผ๋ก `datetime` ๋ชจ๋์ ํจ์์ ํจ๊ป ์ฌ์ฉ๋๋ค
์์ :
from datetime import datetime
event_date = models.DateTimeField(default=datetime.now)
6) `editable`
- ๊ธฐ๋ณธ๊ฐ: `True`
- `False`๋ก ์ค์ ํ๋ฉด Django ๊ด๋ฆฌ์(admin)์์ ํ๋๋ฅผ ์์ ํ ์ ์๋ค
์์ :
event_date = models.DateTimeField(editable=False)
3. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ํ์
- Django๋ ๊ธฐ๋ณธ์ ์ผ๋ก UTC ์๊ฐ๋๋ฅผ ์ฌ์ฉํ๋ค (์ค์ ํ์ผ์์ `TIME_ZONE` ๋ณ๊ฒฝ ๊ฐ๋ฅ)
- ISO 8601 ํ์์ผ๋ก ์ ์ฅ:
YYYY-MM-DD HH:MM:SS
4. ์๊ฐ๋ ์ค์
1) ๊ธฐ๋ณธ ์๊ฐ๋ ์ค์
- `settings.py`์์ `TIME_ZONE`์ ์ค์ :
TIME_ZONE = 'Asia/Seoul'
USE_TZ = True
2) USE_TZ ์ค์
- True: Django๊ฐ ์๊ฐ๋๋ฅผ UTC ๊ธฐ์ค์ผ๋ก ์ ์ฅํ๊ณ ์๊ฐ๋ ๋ณํ์ ์ฒ๋ฆฌ
- False: Django๊ฐ ๋ก์ปฌ ์๊ฐ๋ ๊ทธ๋๋ก ์ ์ฅ
5. DateTimeField๋ฅผ ํ์ฉํ ์์
1) ๋ชจ๋ธ ์ ์
from django.db import models
from django.utils.timezone import now
class Post(models.Model):
title = models.CharField(max_length=200)
created_at = models.DateTimeField(auto_now_add=True) # ์์ฑ ์๊ฐ ์๋ ์ ์ฅ
updated_at = models.DateTimeField(auto_now=True) # ์์ ์๊ฐ ์๋ ๊ฐฑ์
published_at = models.DateTimeField(default=now) # ๊ธฐ๋ณธ๊ฐ ํ์ฌ ์๊ฐ
2) ๋ฐ์ดํฐ ์ ์ฅ
from myapp.models import Post
from datetime import datetime
# ์ ํฌ์คํธ ์์ฑ
post = Post(title="New Post")
post.save()
# ํน์ ์๊ฐ์ผ๋ก ์ค์
post.published_at = datetime(2025, 1, 1, 12, 0)
post.save()
6. QuerySet์์ ์ฌ์ฉํ๊ธฐ
1) ํํฐ๋ง
from myapp.models import Event
from datetime import datetime
# ํน์ ๋ ์ง ์ดํ์ ์ด๋ฒคํธ ๊ฐ์ ธ์ค๊ธฐ
events = Event.objects.filter(event_date__gte=datetime(2025, 1, 1))
# ํน์ ๋ ์ง ๋ฒ์ ๋ด ์ด๋ฒคํธ
events = Event.objects.filter(event_date__range=["2025-01-01", "2025-01-31"])
2) ๋ ์ง ํ๋ ํ์ฉ
# ํน์ ์ฐ๋์ ๋ฐ์ํ ์ด๋ฒคํธ
Event.objects.filter(event_date__year=2025)
# ํน์ ์์ ๋ฐ์ํ ์ด๋ฒคํธ
Event.objects.filter(event_date__month=1)
# ํน์ ์์ผ์ ๋ฐ์ํ ์ด๋ฒคํธ
Event.objects.filter(event_date__week_day=1) # 1์ ์ผ์์ผ
7. ๊ด๋ฆฌ์(admin)์์์ DateTimeField
1) ๋ ์ง์ ์๊ฐ ํํฐ
Django ๊ด๋ฆฌ์ ํ์ด์ง์์ `DateTimeField`๋ฅผ ๋ฆฌ์คํธ ํํฐ๋ก ์ถ๊ฐ๊ฐ ๊ฐ๋ฅํ๋ค
class EventAdmin(admin.ModelAdmin):
list_filter = ('event_date',)
2) ๊ธฐ๋ณธ ํ์ ํ์
๊ด๋ฆฌ์ ํ์ด์ง์์ DateTimeField๋ ์ค์ ๋ ์๊ฐ๋์ ๋ ์ง ํ์์ ๋ฐ๋ผ ํ์๋๋ค
8. ์ฃผ์์ฌํญ
- `auto_now`์ `auto_now_add`๋ฅผ ๋์์ ์ฌ์ฉํ ์ ์๋ค
- ์๊ฐ๋๋ฅผ ๋ค๋ฃฐ ๋, Django์ `timezone` ๋ชจ๋์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค:
from django.utils.timezone import now
9. ์์ฝ
- `DateTimeField`๋ ๋ ์ง์ ์๊ฐ์ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ Django ๋ชจ๋ธ ํ๋์ด๋ค
- ์ฃผ์ ์ต์ : `auto_now`, `auto_now_add`, `default`, `null`, `blank`
- ์๊ฐ๋ ์ค์ ์ `TIME_ZONE` ๋ฐ `USE_TZ`๋ฅผ ํตํด ์ ์ด ๊ฐ๋ฅ
- QuerySet ํํฐ๋ง, ์ ๋ ฌ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฅ์์ ์ ์ฉํ๊ฒ ํ์ฉ๋๋ค
'AI ๐ค > Django โ๏ธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[250203] Serializer ์ ๋ฆฌ~ (0) | 2025.02.03 |
---|---|
[250131] django DRF(Django Rest Framework)๋~ (0) | 2025.01.31 |
[250121] ์ฟผ๋ฆฌ์ (QuerySet)์ด๋? (0) | 2025.01.21 |
[250120] HttpResponse์ render์ ์ฐจ์ด์ (1) | 2025.01.20 |
[250116] ์คํค๋ง(Schema)์ ERD(Entity-Relationship Diagram) (7) | 2025.01.16 |