Django BooleanField接受了值

时间:2011-05-30 15:03:43

标签: mysql django ms-access

我有一个MySQL数据库,用于从Access数据库迁移数据。 问题是访问将boolean true值保存为-1,而django将boolean true值保存为1(就像MySQL一样)。

因此,对于布尔字段,旧的真值保存为-1,而新的真值保存为1.

我需要对django说要为所有布尔字段都考虑True 1和-1。 我该怎么办?

提前致谢, 塞布丽娜

3 个答案:

答案 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