包含自定义数据类型的旧表的Django模型

时间:2019-02-22 22:28:04

标签: django postgresql django-models custom-data-type

我正在使用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模型中反映此自定义数据类型的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以编写使用自定义定义的数据库类型的the documentation

class ColorField(models.Field):
    def db_type(self, connection):
        return 'enum("red","green","blue","black")'