使用 auto_now_add 时如何让现有条目为空?
How to let existing entries empty when using auto_now_add?
我在现有模型中添加了一个字段:
creation_date = models.DateTimeField(
auto_now_add=True,
blank=True, null=True)
makemigrations 后生成的文件如下所示
migrations.AddField(
model_name='document',
name='creation_date',
field=models.DateTimeField(auto_now_add=True, null=True),
),
应用迁移时,auto_now_add 应用于所有现有条目。
如何避免这种情况? creation_date 应用迁移前记录的所有数据必须保持为空。
最简单的可能是在迁移文件中恢复迁移。所以你先 运行:
./manage.py <b>makemigrations</b>
但您没有 (!) 迁移。然后您可以检查迁移文件,并将其更改为:
# Generated by Django 2.2.2 on 2019-07-11 15:55
from django.db import migrations, models
def <b>set_to_null</b>(apps, schema_editor):
<b>SomeModel</b> = apps.get_model("app", "SomeModel")
SomeModel.objects.update(<b>creation_date=None</b>)
class Migration(migrations.Migration):
dependencies = [
('app', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='somemodel',
name='creation_date',
field=models.DateTimeField(auto_now_add=True, null=True),
),
migrations.RunPython(<b>set_to_null</b>),
]
然后你就可以迁移你的数据库了。它将首先构造一个额外的字段,然后将 creation_date
列设置为 NULL
.
现有记录的 set_to_null
我在现有模型中添加了一个字段:
creation_date = models.DateTimeField(
auto_now_add=True,
blank=True, null=True)
makemigrations 后生成的文件如下所示
migrations.AddField(
model_name='document',
name='creation_date',
field=models.DateTimeField(auto_now_add=True, null=True),
),
应用迁移时,auto_now_add 应用于所有现有条目。
如何避免这种情况? creation_date 应用迁移前记录的所有数据必须保持为空。
最简单的可能是在迁移文件中恢复迁移。所以你先 运行:
./manage.py <b>makemigrations</b>
但您没有 (!) 迁移。然后您可以检查迁移文件,并将其更改为:
# Generated by Django 2.2.2 on 2019-07-11 15:55
from django.db import migrations, models
def <b>set_to_null</b>(apps, schema_editor):
<b>SomeModel</b> = apps.get_model("app", "SomeModel")
SomeModel.objects.update(<b>creation_date=None</b>)
class Migration(migrations.Migration):
dependencies = [
('app', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='somemodel',
name='creation_date',
field=models.DateTimeField(auto_now_add=True, null=True),
),
migrations.RunPython(<b>set_to_null</b>),
]
然后你就可以迁移你的数据库了。它将首先构造一个额外的字段,然后将 creation_date
列设置为 NULL
.
set_to_null