我有一個MySQL數據庫,其中數據從Access數據庫遷移。 問題是,訪問將boolean true值保存爲-1,而django將boolean true值保存爲1(正如MySQL所發生的那樣)。Django BooleanField接受的值
因此,對於布爾字段,老真值保存爲-1,而新的真實的值保存爲1
我需要說的Django考慮真或1和-1的所有布爾字段。 我該怎麼辦?
由於提前, 薩布麗娜
我有一個MySQL數據庫,其中數據從Access數據庫遷移。 問題是,訪問將boolean true值保存爲-1,而django將boolean true值保存爲1(正如MySQL所發生的那樣)。Django BooleanField接受的值
因此,對於布爾字段,老真值保存爲-1,而新的真實的值保存爲1
我需要說的Django考慮真或1和-1的所有布爾字段。 我該怎麼辦?
由於提前, 薩布麗娜
只需更新所有舊值,以1:
UPDATE <table>
SET <fieldname>=1
WHERE <fieldname>=-1
我不能這樣做,因爲數據庫目前既被訪問應用程序使用,也被基於django的Web應用程序使用。所以我認爲訪問應用程序可以繼續保存-1值,我應該能夠正確讀取。 – Sabrina 2011-05-31 08:53:22
我沒有什麼線索Django是的,但如果你做了你所有的布爾測試與NOT FALSE(或<> 0)而不是TRUE,它將工作,而不管實際值爲TRUE(-1或1)編碼。
這就是我正在做的事情,但我認爲找到一些允許指定真實值的配置選項(如果存在)會更好。 – Sabrina 2011-05-31 08:55:07
創建一個從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
爲什麼不在'MySQL'中將所有'-1'變成'1'? – Nemoden 2011-05-30 15:07:35