【问题标题】:Using different database values for BooleanField in Django在 Django 中为 BooleanField 使用不同的数据库值
【发布时间】:2018-11-23 14:26:22
【问题描述】:

我正在将旧的 MS Access 数据库转换为基于 Django 的网站。我已将数据转换为 SQLite 数据库,并使用 inspectdb 自动生成模型(效果与预期一样好)。

似乎 MS Access 将布尔值存储为 -1True0False。而不是修改数据库(它是一个 lot 的表!)我正在尝试继承 models.BooleanField,如下所示:

class MsAccessBooleanField(models.BooleanField):
    def from_db_value(self, value, expression, connection):
        if value == -1:
            return True
        if value == 0:
            return False

    def to_python(self, value):
        if value == -1:
            return True
        if value == 0:
            return False

    def get_prep_value(self, value):

        if value == True:
            return -1
        if value == False:
            return 0
        return None

    def get_db_prep_value(self, value, connection, prepared=False):
        if value == True:
             return -1
        if value == False:
             return 0
        return None

当我通过管理界面查看条目时,这似乎有效(-1 值在下拉列表中显示为是;0 值显示为否)。

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

【问题讨论】:

  • 您似乎正在覆盖应该用于转换值的方法。
  • 对不起,你能解释一下吗?我不应该覆盖哪种方法?
  • 什么是很多表?我仍然认为迁移是你最好的选择。
  • 49...也许我还是应该进行迁移!
  • @user2672537 你需要一个字符串而不是整数。

标签: python django ms-access


【解决方案1】:

您只需更改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},
    )

【讨论】:

    猜你喜欢
    • 2010-11-30
    • 1970-01-01
    • 2018-02-04
    • 2015-05-05
    • 1970-01-01
    • 2012-09-04
    • 2020-05-01
    • 2014-04-06
    • 1970-01-01
    相关资源
    最近更新 更多