Как установить тип поля модели на основе других полей модели в Django - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть модель ниже:

class Actor(Model):
    VALUE_CHOICES = (
        ('int', 'Integer'),
        ('str', 'String'),
        ('float', 'Float'),
        ('bool', 'Boolean')
    )
    type = models.CharField(max_length=5, choices=VALUE_CHOICES, default='str')
    _value = models.CharField(max_length=100, default='', db_column='value')

Я пытаюсь сделать так, чтобы на основе данных, выбранных в поле «type», поле «_value» проверило ввод и преобразовало его в нужный тип. Мне сказали, что использование django @property может сделать это, но я не уверен, как это работает вместе.

Пока что я пробовал это только для проверки, но безрезультатно:

@property
    def value(self):
        return self._value

    @value.setter
    def value(self, val):
        print('This is self ', self, ' and val is ', val, ' and this is self ', self.request)
        self._value = val

Если у кого-то есть идея или она может направить меня в правильном направлении, я буду признателен за это.

1 Ответ

0 голосов
/ 12 ноября 2018

Я не уверен, что этот тест должен продемонстрировать.Если вы хотите преобразовать значение на основе значения другого поля, сделайте это в получателе;вам не нужен сеттер.

@property
def value(self):
    conversions = {'int': int, 'str': str, 'bool': bool, 'float': float}
    return conversions[self.type](self._value)
...