2016-08-09 64 views
0

我有一個SQLite數據庫(從iOS應用程序)類似:防止從Django的解析不正確的時間戳字段

CREATE TABLE ZSPL (Z_PK INTEGER PRIMARY KEY, ZWHEN TIMESTAMP, ZWHEN2 real) 

1, 492445270.121238, 492445270.121238 
2, 492445270.871551, 492445270.871551 

我希望建立一個Django(V1.10)模型,它following these docs工作:

APPLE_EPOCH = datetime(year=2001, month=1, day=1, hour=0, second=0) 


def apple_time_to_datetime(apple_time): 
    if isinstance(apple_time, datetime): 
     return apple_time 
    return APPLE_EPOCH + timedelta(seconds=float(apple_time)) 


class AppleDateTimeField(models.DateTimeField): 
    def from_db_value(self, value, expression, connection, context): 
     return apple_time_to_datetime(value) 

    def to_python(self, value): 
     return apple_time_to_datetime(value) 

class Spl(models.Model): 
    when = AppleDateTimeField(db_column='ZWHEN') 

但是因爲here試圖在ZWHEN解析數值轉換器註冊parse_datetime這樣的錯誤。如果這些轉換器被註釋掉,那麼dbapi2 convert_timestamp函數here上的錯誤。

類似地,當db_column='ZWHEN'更改爲db_column='ZWHEN2'時,由於日期時間轉換器在自定義轉換器之前註冊,所以它會發生錯誤。你可以在this line上看到conv的值。

我想知道是否有反正要解決這個問題並且首先調用自定義from_db_value轉換器?

暫時我使出使用複製ZWHEN2,而不是ZWHEN場和編輯​​功能如下:

converters[i] = (field_converters + backend_converters, expression) 

代替:

converters[i] = (backend_converters + field_converters, expression) 

回答

0

這是沒有答案我在尋找,因爲它涉及對Django庫的更改,但至少它不涉及編輯源代碼本身。

在爲模型我已經添加了以下幾行相同的文件:

from django.db.backends.sqlite3.base import Database, decoder 

Database.register_converter(str("timestamp"), decoder(apple_time_to_datetime)) 
Database.register_converter(str("TIMESTAMP"), decoder(apple_time_to_datetime)) 

的似乎有「解決」問題。