๐Ÿ‹ โšพ๏ธ ๐Ÿ’ป ๐ŸŽฌ ๐ŸŽฎ

Tech/Django

[Django] 03. Model

aeightchill 2025. 2. 12. 22:25
728x90

 

 

 


 

๐Ÿ“Œ  Model๋กœ DB ๊ตฌ์„ฑํ•˜๊ธฐ

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (๊ตฌ์กฐํ™”)

  • Relational DB (ํ…Œ์ด๋ธ” ํ˜•์‹์œผ๋กœ)   →    row(record) , column(attribute)
  • pandas df์™€ ์™„์ „ํžˆ ์œ ์‚ฌ
    • max( ), groupby( ) apply ๊ฐ€๋Šฅ
  • SQL

 

 

ORM Object  →   ๊ฐ์ฒด

  • django์— ๋‚ด์žฅ๋˜์–ด ์žˆ๋‹ค.

 

 

๐Ÿ“‚  models.py

 

  model์„ ๋งŒ๋“ค ๋•Œ class ๋‹จ์œ„๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

class <๋ชจ๋ธ ์ด๋ฆ„>(models.Model):
	field1 = models.FieldType(option ์ถ”๊ฐ€ ๊ฐ€๋Šฅ)...# Field 1 _field์˜ type์„ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
	field2 = models.FieldType()...# Field 2
	"""
	๋ฌธ์ž์—ด : CharField
	์ˆซ์ž : IntegerField, SmallIntegerField,...
	๋…ผ๋ฆฌํ˜• : BooleanField
	์‹œ๊ฐ„/๋‚ ์งœ : DateTimeField
	...
	"""
	filed option ์ฐพ์•„๋ณด๊ธฐ

class Coffee(models.Model):
	name = models.CharField(default="",max_length=30)
	price = models.IntegerField(default=0)
	is_ice = models.BooleanField(default=False)

 

 

 

๐Ÿ“‚  admin.py

 

  ์–ด๋–ค ๋ชจ๋ธ์ด ์žˆ์„ ๋•Œ ์ด๋ฅผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

from .models import Coffee # admin.py์—์„œ Coffee๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

admin.site.register(Coffee)

 

โ–ถ๏ธ  models.py,  admin.py ์ž‘์„ฑ ํ›„ http.../admin/์— ์ ‘์†ํ•˜๊ฒŒ ๋˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜์˜จ๋‹ค.

 

 

→  ์œ„์˜ ํ™”๋ฉด์—์„œ Coffees๋ฅผ ๋ˆ„๋ฅด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

→  DB์˜ ๊ด€์ ์—์„œ DB์— ์–ด๋–ค ๋ณ€๋™ ์‚ฌํ•ญ์ด ์ƒ๊ธฐ๋ฉด, ์ด ๋ณ€๋™ ์‚ฌํ•ญ์„ settings.py์—์„œ ๋ฐ˜์˜ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 


 

โ–ถ๏ธ  ์•ž์„œ ๋ฐœ์ƒํ•œ no such table์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.

 

django-proj/webproj > python manage.py makemigrations homepage

 

# ๋งŒ๋“ค์–ด์ง„ migration์„ ๋ฐ์ดํ„ฐ์— ๋ฐ˜์˜
django-proj/webproj > python manage.py migrate

 

⇒  ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ตฌ์กฐ๊ฐ€ ๋œ๋‹ค.

 


 

โ–ถ๏ธ  migrate ์‹คํ–‰ ํ›„ admin์˜ Coffees๋ฅผ ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด models.py์—์„œ ์ž‘์„ฑํ–ˆ๋˜ ๋ถ€๋ถ„์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

→  Add coffee๋ฅผ ํ†ตํ•ด 2๊ฐœ์˜ Object๋ฅผ ์ถ”๊ฐ€ํ•œ ํ›„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ €์žฅ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 


 

โ–ถ๏ธ  Coffee object (1), (2)๋ผ๊ณ  ๋‚˜์™€์žˆ์–ด์„œ ์–ด๋–ค ๊ฒƒ์ธ์ง€ ์•Œ๊ธฐ์— ์–ด๋ ค์›€์ด ์žˆ๋‹ค.

 

๐Ÿ“‚  models.py

# models.py
class Coffee(models.Model):
	def __str__(self): # Coffee ๊ฐ์ฒด๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ณผ์ •์—์„œ ์–ด๋–ค ๋ฌธ์ž์—ด์„ ๋ณด์—ฌ์ค„ ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.
		return self.name # Coffee ๊ฐ์ฒด๋ฅผ ๋Œ€ํ‘œํ•˜๋Š” self.name์ด ์ถœ๋ ฅ๋  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
	name = ...
	...

 

 

⇒  object๊ฐ€ ์•„๋‹Œ name์œผ๋กœ ์ถœ๋ ฅ๋˜์–ด ๋ณด๊ธฐ ํŽธํ•ด์กŒ๋‹ค.

 

 

 


๐Ÿ“Œ  django error : That port is already in use

 

๊ฐ‘์ž๊ธฐ ์˜ค๋ฅ˜๋ฅผ ๋งž์ดํ•˜๊ฒŒ ๋๋‹ค...๐Ÿค”

 

 

ํ•ด๊ฒฐ

django-proj/webproj > lsof -i:8000

 

 

kill -9 [PID]

lsof -i:8000 # ๋‹ค์‹œ ํ™•์ธํ•ด๋ณธ๋‹ค.

python manage.py runserver # ํ•ด๊ฒฐ์™„๋ฃŒ

 

 

ํ˜น์‹œ ๋‹ค๋ฅธ ์„œ๋น„์Šค๊ฐ€ ์ด๋ฏธ 8000๋ฒˆ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด

python manage.py runserver 0.0.0.0:8001

 

 

 

 

 

728x90