Django管理控制台 - 将字符串解析为DateField

时间:2012-03-27 21:28:23

标签: python django datefield

目前在我们的数据库中,日期字段以字符串形式输入(例如:11/7/2009)。在我的models.py文件中是否存在将此字段从TextField转换为DateField以便在管理控制台中用户可以从日历视图中选择日期而不必手动输入日期?或许可以动态解析它?

date = models.TextField()

转换为..

date = models.DateField()

2 个答案:

答案 0 :(得分:0)

最好的办法是开始正确存储数据。为此,您需要更改表以添加具有日期类型的新字段(在数据库中)。将现有日期数据从charfield解析为此新字段,然后最终更改表以删除charfield并相应地重命名临时日期字段

使用django-south管理迁移可以简化此过程。您需要3次迁移:schemamigration用于添加临时字段,datamigration用于转换数据,schemamigration用于删除旧列并重命名新列。

您可以尝试在管理员中使用自定义表单...您可能可以在运行时强制转换,但这确实不是一个好主意,因为您确实应该正确存储数据。我之前在管理员中使用过自定义表单,但不是这样,所以我无法确定它是否可行。

答案 1 :(得分:0)

将MSSQL中的列更改为键入日期后,我们仍然遇到了同样的问题。我还应该提到我们使用pyodbc来帮助服务我们的后端。我们所做的更改是在operation.py文件中的pyodbc代码中。添加了类型 - 除外。

 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管理控制台显示了Calendar小部件。