我需要将模型字段从DateField
更改为DateTimeField
。 ./manage.py makemigrations
生成的迁移仅会将列类型从日期更改为日期时间,但它们不会迁移现有数据。
例如,当我更改以下模型时
class Post(models.Model):
time = models.DateField()
到
class Post(models.Model):
time = models.DateTimeField()
时间列的值仍然是数据库中的日期(如2016-12-21
)。因此,post.time
对于每个帖子都是None
。
相反,datetime.date(2016, 12, 21)
等每个对象都应自动成为datetime.datetime(2016, 12, 21, 0, 0)
。什么是解决这个问题的最佳方法?
答案 0 :(得分:2)
您可以使用记录在here
的数据迁移您的迁移可能是:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from datetime import datetime
from django.db import migrations, models
def update_time(apps, schema_editor):
Post = apps.get_model("yourappname", "Post")
for post in Post.objects.all():
post.time = datetime.combine(post.time, datetime.min.time())
post.save()
class Migration(migrations.Migration):
initial = True
dependencies = [
('yourappname', '0001_initial'),
]
operations = [
migrations.RunPython(update_time),
]
答案 1 :(得分:1)
./manage.py makemigrations
./manage.py migrate
./manage.py makemigrations
./manage.py migrate
,这将运行#3迁移文件,然后运行#4以删除DateField。