目前在我们的数据库中,日期字段作为字符串输入(例如:2009 年 11 月 7 日)。无论如何,我的 models.py 文件中是否有将此字段从 TextField 转换为 DateField 以便在管理控制台中用户可以从日历视图中选择日期,而不必手动输入?也许即时解析它?
date = models.TextField()
转换成..
date = models.DateField()
最好的办法是开始正确存储数据。为此,您需要更改表以添加具有日期类型的新字段(在数据库中)。将 charfield 中的现有日期数据解析到这个新字段中,然后最后更改表以删除 charfield 并适当地重命名临时日期字段
这个过程可以通过使用 django-south 来管理迁移来简化。您将需要 3 次迁移:添加临时字段的模式迁移、转换数据的数据迁移、删除旧列并重命名新列的模式迁移。
您可以尝试在管理员中使用自定义表单...您可以在运行时强制转换,但这确实不是一个好主意,因为您确实应该正确存储数据。我以前在管理员中使用过自定义表单,但不是为此,所以我不确定它是否会起作用。
将 MSSQL 中的列更改为键入日期后,我们仍然遇到同样的问题。我还应该提到我们正在使用 pyodbc 来帮助我们的后端服务器。我们所做的更改在 operation.py 文件中的 pyodbc 代码中。添加了一个类型-except。
def convert_values(self, value, field):
.......
elif field and field.get_internal_type() == 'DateField':
try:
value = value.date() # extract date
#ADDED THE FOLLOWING TO CATCH THE ERROR
except AttributeError:
value = datetime.datetime.strptime(value, '%Y-%m-%d').date()
添加后,django 管理控制台显示日历小部件。