2011-05-30 78 views
0

我有一個MySQL數據庫,其中數據從Access數據庫遷移。 問題是,訪問將boolean true值保存爲-1,而django將boolean true值保存爲1(正如MySQL所發生的那樣)。Django BooleanField接受的值

因此,對於布爾字段,老真值保存爲-1,而新的真實的值保存爲1

我需要說的Django考慮真或1和-1的所有布爾字段。 我該怎麼辦?

由於提前, 薩布麗娜

+1

爲什麼不在'MySQL'中將所有'-1'變成'1'? – Nemoden 2011-05-30 15:07:35

回答

1

只需更新所有舊值,以1:

UPDATE <table> 
SET <fieldname>=1 
WHERE <fieldname>=-1 
+0

我不能這樣做,因爲數據庫目前既被訪問應用程序使用,也被基於django的Web應用程序使用。所以我認爲訪問應用程序可以繼續保存-1值,我應該能夠正確讀取。 – Sabrina 2011-05-31 08:53:22

0

我沒有什麼線索Django是的,但如果你做了你所有的布爾測試與NOT FALSE(或<> 0)而不是TRUE,它將工作,而不管實際值爲TRUE(-1或1)編碼。

+0

這就是我正在做的事情,但我認爲找到一些允許指定真實值的配置選項(如果存在)會更好。 – Sabrina 2011-05-31 08:55:07

0

創建一個從models.BooleanField擴展的自定義BooleanField類。在下一課中,真值在DB上保存爲-1。

class AccessCompatibleBooleanField(models.BooleanField): 

    def to_python(self, value): 
     if value == True: 
      return -1 
     if value == False: 
      return False 
     if value in ('t', 'True', '1', '-1'): 
      return -1 
     if value in ('f', 'False', '0'): 
      return False 
     raise exceptions.ValidationError(self.error_messages['invalid']) 

如果你想做出這樣.filter過濾器(可見參數= TRUE)和有形項目,自定義布爾字段,你必須添加下面的方法到您的自定義類。

def get_prep_value(self, value): 
     if value is None: 
      return None 
     b = bool(value) 
     if b: 
      return -1 
     return b