我使用的是Django 1.8版本。
我有一个model.py文件,内容如下:
class Product(models.Model):
name = models.CharField(max_length=150)
created_at = models.DateField(auto_now_add = True)
modified_at = models.DateField(auto_now = True)
MySQL有一个名为"created_at"和"modified_at"的表格,其中的数据格式如下:"2015-11-02"。我想要将其改成"2015-11-02 14:54:22"。
我将models.py文件修改为以下内容:
class Product(models.Model):
name = models.CharField(max_length=150)
created_at = models.DateTimeField(auto_now_add = True)
modified_at = models.DateTimeField(auto_now = True)
然后我在控制台中运行迁移。
python manage.py makemigrations
python manage.py migrate
但是什么都没有发生。MySQL表中的数据并没有改变,当我添加新信息时,MySQL仍然按照旧模式“2015-11-02”添加时间。
我该如何修改它们?
谢谢,我阅读了Django教程,并编写了这段代码。
from __future__ import unicode_literals
from django.db import migrations, models
import datetime
def add_time_to_date(apps, schema_editor):
datetables = apps.get_model("product", "Product")
delta = datetime.timedelta(hours=1)
for x in datetables.objects.all():
x.created_at = x.created_at + delta
x.modified_at = x.modified_at + delta
x.save()
class Migration(migrations.Migration):
dependencies = [
('product', '0003_auto_20151110_1726'),
]
operations = [
migrations.RunPython(add_time_to_date),
]
之后,我运行。
python manage.py migrate
控制台输出了以下内容:
Operations to perform:
Synchronize unmigrated apps: staticfiles, messages
Apply all migrations: admin, contenttypes, product, auth, sessions
Synchronizing apps without migrations:
Creating tables...
Running deferred SQL...
Installing custom SQL...
Running migrations:
Rendering model states... DONE
Applying product.0004_auto_20151110_1821.../home/djangojunior2/virtualpython2/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1414: RuntimeWarning: DateTimeField Product.created_at received a naive datetime (2015-11-02 00:00:00) while time zone support is active.
RuntimeWarning)
/home/djangojunior2/virtualpython2/lib/python2.7/site-packages/django/db/backends/mysql/base.py:124: Warning: Data truncated for column 'modified_at' at row 1
return self.cursor.execute(query, args)
/home/djangojunior2/virtualpython2/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1414: RuntimeWarning: DateTimeField Product.created_at received a naive datetime (2015-11-08 00:00:00) while time zone support is active.
RuntimeWarning)
/home/djangojunior2/virtualpython2/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1414: RuntimeWarning: DateTimeField Product.created_at received a naive datetime (2015-11-09 00:00:00) while time zone support is active.
RuntimeWarning)
/home/djangojunior2/virtualpython2/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1414: RuntimeWarning: DateTimeField Product.created_at received a naive datetime (10 00:00:00) while time zone support is active.
RuntimeWarning)
OK
我检查了Mysql数据库(使用mysql-console),但没有发生任何事情。日期仍然是“2015-11-02”。如果我添加新数据,在表格的modified_at和created_at中,日期会以旧格式(“2015-11-02”)添加。
我做错了什么?