Модель Django для устаревшей таблицы, содержащей пользовательский тип данных - PullRequest
0 голосов
/ 23 февраля 2019

Я работаю с устаревшей таблицей Postgresql и обнаружил, что некоторые поля имеют пользовательские типы данных.

Например, вместо, например, character varying, столбец color имеет color_type как тип данных с допустимыми параметрами [red|green|blue|black].

Опираясь на команду inspectdb, автоматически сгенерированная модель содержит следующую строку и комментарий:

color = models.TextField(blank=True, null=True)  # This field type is a guess.

Я бы "очистите эту строку, как описано в следующем классе, но я не уверен, а) будет ли она правильно «соответствовать» существующей таблице (например, если я напишу новые объекты внутри таблицы), и б) будет ли она перенесена в новую базу данных,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 голосов
/ 23 февраля 2019

Вы можете написать Настраиваемое поле , которое использует пользовательский тип базы данных:

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