在Django中为BooleanField使用不同的数据库值

时间:2018-11-23 14:26:23

标签: python django ms-access

我正在将旧的MS Access数据库转换为基于Django的网站。我已经将数据转换为SQLite数据库,并使用inspectdb自动生成了模型(效果令人满意)。

似乎MS Access将布尔值存储为-1的{​​{1}}和True的{​​{1}}。而不是修改数据库(它是表的很多!),我试图将0子类化,如下所示:

False

当我通过Admin界面查看条目时,这似乎可行(-1值在下拉列表中显示为Yes; 0值显示为No)。

但是(这是问题所在),在修改值并保存时,我只能另存为“否”或“未知”(选择“是”会产生一条消息,提示您未指定任何值)。知道我做错了什么吗?

1 个答案:

答案 0 :(得分:2)

您只需要更改BooleanField.to_python

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