我正在使用Postgresql旧表,发现某些字段具有 custom 数据类型。
例如,而不是character varying
,列color
的数据类型为color_type
,带有允许的选项[red|green|blue|black]
。
依靠inspectdb
命令,自动生成的模型包含以下行和注释:
color = models.TextField(blank=True, null=True) # This field type is a guess.
我将按照下面的类中的描述“清理”这一行,但是不确定a)它是否会适当地“适合”现有表(例如,如果我在表中写入新对象),b)是否迁移到新数据库后,custom_type将正确复制:
class Things(models.Model):
name = models.CharField(max_length=30, null=True, blank=True)
RED = 'red'
GREEN = 'green'
BLUE = 'blue'
BLACK= 'black'
COLOR_CHOICES = (
(RED, 'red'),
(GREEN, 'green'),
(BLUE, 'blue'),
(BLACK, 'black'),
)
color = models.CharField(
max_length = 10,
choices = COLOR_CHOICES,
default = RED,
null = True,
blank = True
)
def __str__(self):
return self.name
class Meta:
managed = False
db_table = 'myuser'
在Django模型中反映此自定义数据类型的正确方法是什么?
答案 0 :(得分:1)
您可以编写使用自定义定义的数据库类型的the documentation:
class ColorField(models.Field):
def db_type(self, connection):
return 'enum("red","green","blue","black")'