在Django中将DateField更改为DateTimeField

在Django中将DateField更改为DateTimeField,django,django-south,Django,Django South,在我的应用程序的当前模型文件中,我有一些发布日期字段,开始日期和结束日期。但是,我想将它们从DateFields更改为DateTimeFields。这将为用户在设置发布日期时提供更大的灵活性,因为他们希望指定一个时间 我正在使用south进行数据库迁移,在更改数据库中的字段时会出现任何问题吗?还是需要移除它?然后将其添加为DateTimeField 一旦我这样做了,我能设置一个默认时间吗?例如,我希望开始日期是早上9点。截止日期是午夜 不管怎样,这是我想换的型号 start_date = mod

在我的应用程序的当前模型文件中,我有一些发布日期字段,开始日期和结束日期。但是,我想将它们从DateFields更改为DateTimeFields。这将为用户在设置发布日期时提供更大的灵活性,因为他们希望指定一个时间

我正在使用south进行数据库迁移,在更改数据库中的字段时会出现任何问题吗?还是需要移除它?然后将其添加为DateTimeField

一旦我这样做了,我能设置一个默认时间吗?例如,我希望开始日期是早上9点。截止日期是午夜

不管怎样,这是我想换的型号

start_date = models.DateField()
end_date = models.DateField()
我想换成:

start_date = models.DateTimeField()
end_date = models.DateTimeField()

任何帮助都将不胜感激。

当您将
日期字段
更改为
日期字段
时,南方只会为您更改它,因此不会发生冲突

例如,我运行:

python manage.py schemamigration --auto hotel
得到了这个输出:

 ~ Changed field start_date on hotel.Event
 ~ Changed field end_date on hotel.Event
Created 0018_auto__chg_field_event_start_date__chg_field_event_end_date.py. You can now apply this migration with: ./manage.py migrate hotel

尽管我建议在进行任何更改之前备份数据库。

您可以使用south轻松做到这一点:

python manage.py schemamigration --auto appname
整个栏目将在午夜开始(例如,
2013-09-26
->
2013-09-26 00:00:00
)。要更改小时,请编辑迁移,并在更改列后,放置:

import datetime
from django.db.models import F

# ... Automatically created db.alter_column

if not db.dry_run:  # needed whenever making data changes
    # This will add 9 hours to *all* records
    orm['appname.ModelName'].objects.all().update(start_date=F('start_date') + datetime.timedelta(hours=9))
至于
结束日期
,它将在午夜开始,但是如果您想将其设置为
23:59:59
,您还可以添加
datetime.timedelta(小时=23,分钟=59,秒=59)
,或者简单地添加
datetime.timedelta(秒=86399)
,这是可读性较差的