Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何基于django中的其他模型字段设置模型字段类型_Django_Django Models_Django Database - Fatal编程技术网

如何基于django中的其他模型字段设置模型字段类型

如何基于django中的其他模型字段设置模型字段类型,django,django-models,django-database,Django,Django Models,Django Database,我的模型如下: class Actor(Model): VALUE_CHOICES = ( ('int', 'Integer'), ('str', 'String'), ('float', 'Float'), ('bool', 'Boolean') ) type = models.CharField(max_length=5, choices=VALUE_CHOICES, default='str')

我的模型如下:

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”字段中选择的数据,“\u 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

如果有人有一个想法或能把我引向正确的方向,我将不胜感激。

我不确定该测试应该演示什么。如果要基于另一个字段的值转换一个值,请在getter中进行转换;你不需要二传手

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

谢谢你,丹尼尔,成功了。你能解释一下为什么转换dict是必需的,如果我想创建一个try/catch,那么应该查找什么是好的属性错误吗?这不是必需的,你可以执行一系列if/elif语句-但关键是self.type的值是一个字符串,你需要从那里得到实际的类型方法本身。如果找不到查找,dict将引发KeyError。