我有一个带有字段的模型
date = models.DateField()
现在我想将此字段迁移到DateTimeField,所以它应该像这样:
date = models.DateTimeField()
我知道我应该运行以下命令进行迁移。
python manage.py makemigrations
python manage.py migrate
我尝试使用此命令python manage.py schemamigration --auto appname
,但对我没有帮助
但是我想通过保存日期来迁移所有此字段,并且仅添加时间00:00:00:000000。 您能帮我解释一下我该怎么做吗?
答案 0 :(得分:0)
我找到了解决问题的方法,因此下面添加了有助于进行此迁移的步骤。
将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');
我不确定此解决方案是否是最佳做法,但对我来说有用。
编辑:
以上解决方案有效,但想提出第二种可能性。
第一
在“模型”中添加一个新字段,该字段将与更改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