既にレコードが存在する状態で、NULL禁止かつデフォルト値指定なしのフィールドを追加するとこうなる。
デフォルト指定していないので、既存のレコードにはNULL禁止であるにも関わらず、NULLが入ってしまう。そこで既存のレコードはどうするか聞いている。与えられた選択肢は2つ。
警告文に応じる(1度限りのdefaultを指定する)
from django.db import models
class Topic(models.Model):
comment = models.CharField(verbose_name="コメント",max_length=2000)
def __str__(self):
return self.commentモデルフィールドを追加
from django.db import models
class Topic(models.Model):
comment = models.CharField(verbose_name="コメント",max_length=2000)
dt = models.DateTimeField(verbose_name="投稿日時")
def __str__(self):
return self.commentYou are trying to add a non-nullable field 'dt' to topic 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:timezone.now()フィールドオプションのdefaultを追加する
models.pyの新しく追加したdtにフィールドオプションのdefaultを指定する。DatetimeFieldの場合、下記のようにdefaultを指定する。
from django.db import models
from django.utils import timezone
class Topic(models.Model):
comment = models.CharField(verbose_name="コメント",max_length=2000)
dt = models.DateTimeField(verbose_name="投稿日時",default=timezone.now)
def __str__(self):
return self.comment実行するときに値が変わる、メソッドのtimezone.now()ではなく、その関数そのものを意味する属性値のtimezone.nowを指定する。timezoneはdjango.utilsの中に含まれているので、冒頭でインポートさせる。



