Skip to main content
 首页 » 编程设计

python之Django ORM : can I have a BooleanField associated to a char column in the database

2025年05月04日33think

我从我们拥有的旧系统“继承”了一个数据库,其中(除了其他丑陋的东西)某个表中的一列应该是 bool 值,而不是带有'N'或'的varchar(1) 0'代表假,'Y'或'1'代表真(代码的不同部分在编写时使用一种或另一种约定,但显然他们在阅读时都能识别这两种约定)。

我正在将最初用 Java 编写的系统移植/重写到 Python+Django,并且只有在移植完成后我才能关闭旧系统并“清理”数据库困惑。

我想让模型类中的字段在外部显示为 bool 值,因此当最终更正数据库时,我唯一需要在代码中做的就是将字段更改为普通字段 bool 字段。有没有一种简单的方法可以做到这一点?

请您参考如下方法:

您可以通过子类化 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 

希望这能给你一些见识:)