检查数据库字段的类型 - python

时间:2018-04-12 08:41:14

标签: python django python-3.x casting

我有一个包含设置的Django模型,因此模型的每个元素都是一个设置,可能的字段是setting_name,setting_value,setting_type等。

例如,如果我有一个名为 version 的设置,其中可能的值为整数(如1,2,3),则数据库中的字段如下:

  • setting_name ="版本"
  • setting_value =" 2"
  • setting_type =" int"

我需要做的是检查设置的值和类型是否一致。

使用整数字段不是问题,因为我能够将值强制转换为Int以便检查它。

但是浮动和str怎么样?在第一种情况下(Float),如果字段包含int(即" 5" - > 5.0),我不想自动转换

对于字符串,而不是"演员方法"是不可能的,因为该字段始终是来自数据库的字符串。

有什么建议吗?

我使用的是Python 3.5和Django 1.11

提前谢谢

2 个答案:

答案 0 :(得分:0)

你可以让你的模型变成这样:

public void sortString()
{
    List<LabNine> sortedLabNineWords = new ArrayList<>(labNineWords);
    Collections.sort(sortedLabNineWords,
        Comparator.comparing(LabNine::display));
    System.out.println("\n");
    System.out.println("*****Your List Of Unique Word*********");
    for (int i = 0; i < sortedLabNineWords.size(); i++) {
        LabNine  labnine = sortedLabNineWords.get(i);
        System.out.println(labnine.display()); 
    }
}

你也可以在这个模型中添加类函数来返回值,如下所示:

class Setting(models.Model):
    TYPE_CHOICES = (
        (1, "Integer"),
        (2, "String"),
        (3, "Boolean"),
        (4, "Decimal")
    )
    key = models.CharField(max_length=32)
    value = models.TextField()
    value_type = models.IntegerField(choices=TYPE_CHOICES)

答案 1 :(得分:0)

您可以覆盖保存以检查一致性。如果type无效,将引发ValueError。

def save(self, *args, **kwargs):
    if self.setting_type == 'int':
        int(self.setting_value)
    # Checking int first to avoid treating floats as valid int type
    elif self.setting_type == 'float':
        float(self.setting_value)
    elif self.setting_type == 'string':
        # Logic for validating string here
    else:
        raise ValueError('Setting type not recognized' + self.setting_type)
    super(Setting, self).save(*args, **kwargs)