在我的应用程序的当前模型文件中,我有一些发布日期字段,开始和结束日期。但是我想将它们从DateFields更改为DateTimeFields。这将为用户在设置发布日期时提供更多灵活性,因为他们希望指定时间。
我正在使用south进行数据库迁移,在更改数据库中的字段时会有任何问题吗?或者需要将其删除?然后将其添加为DateTimeField?
一旦我完成了,我能设置默认时间吗?例如,我希望开始日期从早上9点开始。结束日期在午夜结束。
无论如何,这里是我想要改变的模型。
start_date = models.DateField()
end_date = models.DateField()
我想改为:
start_date = models.DateTimeField()
end_date = models.DateTimeField()
任何帮助都将不胜感激。
答案 0 :(得分:3)
当您将DateField
更改为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
虽然我会建议在进行任何更改之前备份数据库。
答案 1 :(得分:0)
你可以轻松地用南方做到这一点:
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))
对于end_date
,它已经在午夜开始,但如果您想将其设置为23:59:59
,您还可以添加datetime.timedelta(hours=23, minutes=59, seconds=59)
或仅datetime.timedelta(seconds=86399)
,这是不太可读的。