Django์์ ์ต์ด์ makemigrations์ ํ ํ, ์ ์ปฌ๋ผ์ ์ถ๊ฐํ๊ณ ๋ค์ makemigrations์ ์๋ํ๋ฉด์ ์๊ธด ์๋ฌ์ด๋ค.
โError Message
>> python manage.py makemigrations
You are trying to add a non-nullable field 'name_eng' to menu without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
2) Quit, and let me add a default in models.py
Select an option:
๐ ์๋ฌ ํด์ํ๊ธฐ
# models.py
# ์ต์ด migrateํ migrations ์ฝ๋
class Menu(models.Model):
name = models.CharField(max_length=80)
description = models.CharField(max_length=120)
price = models.IntegerField()
img_path = models.CharField(max_length=255)
def __str__(self):
return self.name
# migrations ์์ ์ ์ํ ์ฝ๋
class Menu(models.Model):
name = models.CharField(max_length=80)
name_eng = models.CharField(max_length=80)
description = models.CharField(max_length=120)
price = models.IntegerField()
img_path = models.CharField(max_length=255)
def __str__(self):
return self.name
์์ ์ฝ๋ ๋ธ๋ญ์ ์ฐธ๊ณ ํ๋ฉด, name_eng
์ปฌ๋ผ์ด ์ถ๊ฐ ๋ ๊ฒ์ ํ์ธ ํ ์ ์๋ค.
์๋ฌ ๋ฉ์ธ์ง์ ๋ด์ฉ์ ๊ทธ๋๋ก ํด์์ ํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค. (by papago ๐ฆ)
null์ด ์๋ ํ๋ 'name_eng'์ ๊ธฐ๋ณธ๊ฐ ์์ด ๋ฉ๋ด์ ์ถ๊ฐํ๋ ค๊ณ ํฉ๋๋ค. ๊ทธ๋ด ์ ์์ต๋๋ค(๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ์กด ํ์ ์ฑ์์ผ ํจ).
์์ ์ฌํญ์ ์ ํํ์ญ์์ค.
1) ์ง๊ธ ์ผํ์ฑ ๊ธฐ๋ณธ๊ฐ ์ ๊ณต(์ด ์ด์ ๋ํด null ๊ฐ์ผ๋ก ๊ธฐ์กด ๋ชจ๋ ํ์ ์ค์ ๋จ)
2) ์ข ๋ฃํ๊ณ ๋ชจ๋ธ์ ๊ธฐ๋ณธ๊ฐ์ ์ถ๊ฐํฉ๋๋ค.
์ต์ ์ ํ :
์ฆ, ์ ์ปฌ๋ผ์ด ์ถ๊ฐ๋๊ธฐ์ ๊ธฐ์กด์ row, ๋ฐ์ดํฐ์ ๋ํด์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ฒ์ธ์ง์ ๋ํด ์ ํ์ ํด๋ฌ๋ผ๋ ๋ง์ด๋ค.
1๋ฒ์ ์ฑ์๋ฃ์ ๊ฐ์ ์ง์ ์ ๋ ฅํด์ ๋ฃ๊ฒ ๋ค๋ ์๋ฏธ๋ก, ํด๋น ์ปฌ๋ผ ์๋ฃํ์ ๋ง๊ฒ ์ ๋ ฅํด์ฃผ์ด์ผํ๋ค. ์์ ์์์๋ CharField์ ๋ง๊ฒ ๋ฌธ์์ด ์๋ฃํ์ผ๋ก ์ฑ์์ฃผ์ด์ผํ๋ค.
2๋ฒ์ ์ค๋จํ๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค.
๊ทธ๋ฆผ์ผ๋ก ๋ณด๋ฉด ์ด๋ฐ ๋๋์ด๋ค.
โ๏ธsolution code
1. migrate ํ๊ธฐ ์ ์ด๋ผ๋ฉด
์์ฑ๋ migration ํ์ผ์ ์ญ์ ํ์๊ณ ๋ค์ ์คํ ๊ฐ๋ฅ
์ด๋ฏธ ์์ฑ๋์ด์๋ค๋ฉด ๋ถ๊ฐ๋ฅ! 2๋ฒ ๋ฐฉ๋ฒ์ผ๋ก โคต๏ธ
* ์ญ์ ํ ๋๋ migarionsํด๋์ ํ์ผ๊ณผ, db.sqlite3 ํ์ผ์ ๊ฐ์ด ์ญ์ ํด์ผํจ
2. migrate๋ฅผ ํตํด ์ด๋ฏธ DB์ ์ ์ฉํ๋ค๋ฉด
์๋์ ์ฝ๋ ์ค ํ๋๋ก ์์ ํด์ค๋ค.
case 1๋ฒ์ ๋น ๋ฌธ์์ด, case 2๋ฒ์ "์ฑ์๋ฃ์ ๊ฐ"์ผ๋ก ์ฑ์์ง๊ฒ ๋๋ค.
# models.py
# case 1
name_eng = models.CharField(max_length=80, blank=True)
# case 2
name_eng = models.CharField(max_length=80, default='์ฑ์๋ฃ์ ๊ฐ')
๐ reference
์ฝ๋์ ๊ฐ์๋ฅผ ๋ฃ๋ ์ค ๋ฐ๊ฒฌํ QnA๋ฅผ ํตํด ์ํํ๊ฒ ํด๊ฒฐํ๋ค!
์ฝ๋์ ๋ฑ๊ธํ์์ ์ด๋๋ง SUN์ ๋ฌ์ฑํ ๋งํผ ๋ง์ด ๋ค์๋๋ฐ ๋งค๋ฒ QnA์์ ํฐ ๋์ ์ฃผ์๋ ๋์ด๋ ๊ฐ์ฌํฉ๋๋คโบ๏ธ