python - 在 Django 中从 DateField 迁移到 DateTimeField
问题描述
我有一个带字段的模型
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。你能帮我解释一下我该怎么做吗?
解决方案
我为我的问题找到了解决方案,因此在下面我添加了有助于进行此迁移的步骤。
将 models.py 中的字段类型从下面DateField()
的DateTimeField()
Run 命令更改为
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
推荐阅读
- php - Eloquent Model 的对象在调用 get 方法时再次调用构造函数
- google-apps-script - buonded 脚本中的自定义函数仅在从脚本运行时有效,而不是从原始工作表 (GAS) 运行
- python - 使用openpyxl读取多个txt文档并输出到excel
- python - 如何将相同的 numpy 函数应用于布尔索引选择的子数组?
- python - 在 Python 3.7 (macOS) 上运行扭曲的示例脚本会引发异常
- rdf - 对 RDF 知识图感到困惑
- c - 将 va_args 传递给自定义格式函数
- python - 如何从nodes.py文件中的类运行函数?
- python - 如何使个人成为 DEAP 中的可变长度列表
- javascript - 如何使用 Angular 8 键值管道仅显示特定值