我有一个MySQL数据库,用于从Access数据库迁移数据。 问题是访问将boolean true值保存为-1,而django将boolean true值保存为1(就像MySQL一样)。
因此,对于布尔字段,旧的真值保存为-1,而新的真值保存为1.
我需要对django说要为所有布尔字段都考虑True 1和-1。 我该怎么办?
提前致谢, 塞布丽娜
答案 0 :(得分:1)
只需将所有旧值更新为1:
UPDATE <table>
SET <fieldname>=1
WHERE <fieldname>=-1
答案 1 :(得分:0)
我不知道Django是什么,但如果你使用NOT FALSE(或&lt;&gt; 0)而不是TRUE进行了所有布尔测试,那么无论为TRUE编码的实际值如何,它都将起作用( -1或1)。
答案 2 :(得分:0)
创建一个自定义的BooleanField类,该类扩展自models.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(visibles = True)这样的make过滤器,并且visibles是自定义布尔字段,则必须将以下方法添加到自定义类中。
def get_prep_value(self, value):
if value is None:
return None
b = bool(value)
if b:
return -1
return b