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