我为我的问题找到了解决方案,因此在下面我添加了有助于进行此迁移的步骤。
将 models.py 中的字段类型从 DateField() 更改为 DateTimeField()
运行下面的命令
python manage.py makemigrations
python manage.py migrate
并且知道您在数据库中的字段类型为DateTimeField(),但在date 列中,我们只会看到像“2020-09-23”这样的日期。
因此,要将格式更改为“2020-09-23 00:00:00”,我运行我的 SQLite 数据库并在 ExecuteSQL 视图中运行以下命令。
UPDATE table_name SET date=DATETIME(date, '0 minutes');
我不确定这个解决方案是否是最佳实践,但它对我有用。
编辑:
上述解决方案有效,但想提出第二种可能性。
第一
在Model中添加一个新字段,修改后和预期一样date
new_date = models.DateTimeField()
第二
之后,让我们做:
python manage.py makemigrations
python manage.py migrate
第三
现在,我们必须在列中添加日期,因此我们可以将值从 date 复制到 new_date。为此,我们必须创建新的迁移,如下所示:
python manage.py makemigrations app_name --empty
此命令将创建一个新的迁移
第四
现在我们要修改文件如下(假设我们修改User模型)
from django.db import migrations, models
from datetime import datetime
def set_my_defaults(apps, schema_editor):
User = apps.get_model('app_name', 'user')
for us in User.objects.all():
old = pr.date
old_date = datetime(old.year, old.month, old.day, 10, 1, 1, 1)
us.new_date = old_date
us.save()
class Migration(migrations.Migration):
dependencies = [
('appname', 'previous_migration_name'),
]
operations = [
migrations.RunPython(set_my_defaults),
migrations.RemoveField(
model_name='user',
name='date',
),
migrations.RenameField(
model_name='user',
old_name='new_date',
new_name='date',
),
]
如您所见,首先我们将值从date 列复制到new_date 作为日期时间。之后,删除date 列并将名称从new_date 更改为date