Warning: count(): Parameter must be an array or an object that implements Countable in /home/xs638785/agile-software.site/public_html/wp-content/plugins/rich-table-of-content/functions.php on line 490
既にレコードが存在する状態で、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.comment
You 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
の中に含まれているので、冒頭でインポートさせる。