[Django] ์žฅ๊ณ  Model

ํžˆํƒœํ•˜ํƒœยท2021๋…„ 9์›” 23์ผ
0

Django

๋ชฉ๋ก ๋ณด๊ธฐ
2/2

๐ŸŽˆ Model

๋ชจ๋ธ ์ƒ์„ฑ & ์ ์šฉ ๊ณผ์ •
์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ ํ™•์ธ โ†’ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง โ†’ ๋ฐ์ดํ„ฐ์— ๋งž๋Š” field ์ž‘์„ฑ โ†’ ๋ชจ๋ธ ์ƒ์„ฑ / ๋ณ€๊ฒฝ โ†’ django ๋ฐ˜์˜

django์—์„œ model ์ƒ์„ฑ.

#models.py
from django.db import models
class Menu(models.Model):
    name = models.CharField(max_length=50)
    price = models.IntegerField()
    img_path = models.TextField()

๐ŸŽˆ Migration

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜(Migration)์€ ๋ชจ๋ธ(Model)์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ฆ‰ Django ํ”„๋กœ์ ํŠธ์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ Django๋งŒ์˜ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์ด๋‹ค. ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ํ•˜๋‚˜์”ฉ ๋งŒ๋“ค์–ด ๋‘๊ณ  ๋งˆ์น˜ ๋ธ”๋Ÿญ์„ ๊ฐˆ์•„ ๋ผ์šฐ๋“ฏ ์ƒ์„ฑํ•œ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜ํ•˜๋Š” ๊ฑฐ์ฃ . ๊ทธ๋ฆฌ๊ณ  ์ด ๋ชจ๋“  ๊ณผ์ •์€ Django์˜ ORM(Object-Relational Mapping)์„ ํ†ตํ•ด ์ง„ํ–‰ํ•œ๋‹ค.

๋ณ€ํ™”ํ•˜์—ฌ ๋ณ‘ํ•ฉํ•  Migrations ์„ ์ƒ์„ฑ.
python manage.py makemigrations

์ „์ฒด migrations ํ™•์ธ
python manage.py showmigrations

ORM ์„ ํ†ตํ•ด sql ๋กœ ๋ณ€๊ฒฝ์„ ํ™•์ธ
python manage.py sqlmigrate {app๋ช…} {migrations num}

๋ณ€๊ฒฝ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜
python manage.py migrate

๐ŸŽˆ ๋ฐ์ดํ„ฐ ๋„ฃ๊ณ  ์กฐํšŒ

ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋กœ ์ด๋™ ํ›„ shell ์‹คํ–‰
python manage.py shell

  • model ๊ฐ€์ ธ์˜ค๊ธฐ
    from {app}.models import {model๋ช…}
  • ๋ฐ์ดํ„ฐ ์‚ฝ์ž…
    {model๋ช…}.objects.create({ํ•„๋“œ๋ช…}={๊ฐ’})
  • ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์กฐํšŒ
    {model๋ช…}.objects.all()
  • ๋ชจ๋“  ์„ธ๋ถ€ ๋ฐ์ดํ„ฐ ์กฐํšŒ
    {model๋ช…}.objects.all().values()

๐ŸŽˆ ๋ฐ์ดํ„ฐ ์ƒ์„ธ ์กฐํšŒ

{model}.objects.all() : ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์กฐํšŒ
{model}.objects.all.values(์ปฌ๋Ÿผ๋ช…) : ํŠน์ • ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ ์กฐํšŒ
{model}.objects.order_by(ํ•„๋“œ๋ช…) : ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ, ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ํ• ๋• ํ•„ํ„ฐ์— '-' ๋ถ™์—ฌ์„œ ์‚ฌ์šฉ
{model}.objects.get(field=value) : ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ. ์—ฌ๋Ÿฌ๊ฐœ ๋‚˜์˜ฌ ์‹œ ์—๋Ÿฌ ๋ฐœ์ƒ
{model}.objects.filter(field=value) : ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ
rows = {model}.objects.count() : ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜ ์„ธ๊ธฐ
data = {model}.objects.exclude(field=value) : ํŠน์ • ์กฐ๊ฑด ์ œ์™ธํ•œ ๋ฐ์ดํ„ฐ ์กฐํšŒ
data = {model}.objects.filter(price=10000).order_by('name') : ์ฒด์ธ์œผ๋กœ ์—ฐ๊ฒฐํ•ด์„œ ์กฐํšŒ

์กฐ๊ฑด ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰
__exact, __iexact : ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„/๋ฏธ๊ตฌ๋ถ„ ์ผ์น˜ํ•˜๋Š”์ง€๋ฅผ ์ฒดํฌ

data = {model}.objects.filter({ํ•„๋“œ๋ช…}__iexact='chicken')
# {ํ•„๋“œ๋ช…}์ด 'chicken'์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
# ๋‹จ, ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

__contains,__icontains : ์ง€์ •ํ•œ ๋ฌธ์ž์—ด์„ ํฌํ•จํ•˜๋Š”์ง€ ์ฒดํฌ (๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„/๋ฏธ๊ตฌ๋ถ„)

data = {model}.objects.filter({ํ•„๋“œ๋ช…}__contains='chicken')
# {ํ•„๋“œ๋ช…}์— 'chicken'์ด ํฌํ•จ๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
# ๋‹จ, ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. (__contains)

__range : ์ง€์ •ํ•œ ๋ฒ”์œ„ ๋‚ด์— ํฌํ•จ๋˜๋Š”์ง€ ์ฒดํฌ

data = {model}.objects.filter({ํ•„๋“œ๋ช…}__range=(1000,5000))
# {ํ•„๋“œ๋ช…}์ด 1000~5000์ธ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

__in : ์ฃผ์–ด์ง„ ๋ฆฌ์ŠคํŠธ ์•ˆ์— ์กดํ•˜๋Š” ์ž๋ฃŒ๋ฅผ ์กฐํšŒ

data = {model}.objects.filter({ํ•„๋“œ๋ช…}__in=[21,25,27])

๐ŸŽˆ ๋ฐ์ดํ„ฐ ์ˆ˜์ •

from {app}.models import {model๋ช…}
data = {model๋ช…}.objects.get(id=1)
data.{ํ•„๋“œ๋ช…} = {๋ณ€๊ฒฝํ• ๋‚ด์šฉ}
data.save()

{model๋ช…}.objects.all()

๐ŸŽˆ ๋ฐ์ดํ„ฐ ์‚ญ์ œ

from {app}.models import {model๋ช…}
data = {model๋ช…}.objects.get(id=1)
data.delete()

profile
์‹œ์ž‘์ด ๋ฐ˜์ด๋‹ค. ์ผ๋‹จ ์‹œ์ž‘ํ•ด๋ณด์ž.

0๊ฐœ์˜ ๋Œ“๊ธ€