Django ORM:我可以将一个BooleanField与数据库中的char列相关联吗?

Fab*_*llo 1 python django orm

我从一个旧系统"继承"了一个数据库,其中(在其他丑陋的东西中)某个表中的列应该是布尔值,而是一个带有'N'或'0'的varchar(1)表示为false,'Y'或'1'表示true(代码的不同部分在编写时使用一个或另一个约定,但显然所有这些部分在读取时都能识别).

我将最初用Java编写的系统移植/重写到Python + Django,我将能够关闭旧的并且只在端口完成时"清理"数据库混乱.

我想让模型类中的字段在外部显示为布尔值,因此当数据库最终得到纠正时,我在代码中唯一要做的就是将字段更改为普通的BooleanField.有一个简单的方法吗?

mou*_*uad 5

您可以通过继承django.db.models.Field并实现to_python方法来创建自己的字段类,其行为与您想要的一样,例如

from django.db import models

class MyField(models.CharField):

     def to_python(self, value):
         if value in ('Y', '1'):
             return True
         if value in ('N', '0'):
             return False
         raise ValueError
Run Code Online (Sandbox Code Playgroud)

希望这会给你一些见解:)