无法在Django Model中将字符串转换为float

时间:2014-09-03 07:17:40

标签: python django

我有一个Django模型,它有一个字段保存为字符串但具有浮点值。

例如:"0.123,0.221"是存储在Location列中的字符串。保存时,我希望将这些值分别保存在latitudelongitude中作为浮点数。为此我已经完成了以下模型

class TestModel(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=200)
    location = LocationField(blank=True, max_length=255)
    latitude = models.FloatField(editable=False, default=0.0)
    longitude = models.FloatField(editable=False, default=0.0)

    def __unicode__(self):
        return self.title

    def convert(s):
        try:
            return float(s)
        except ValueError:
            num, denom = s.split('/')
            return float(num) / float(denom)

    def save(self):
        if not self.id:
            a = self.location
            b = a.index(',')
            self.latitude = TestModel.convert(a[:b]) #Taking part of string before the comma
            self.longitude = TestModel.convert(a[b:]) #taking part of string after comma
        super(TestModel, self).save()

保存时,它会给我这个错误:

TypeError at /site/admin/MyApp/testmodel/add/
unbound method convert() must be called with TestModel instance as first argument (got unicode instance instead)

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

首先,如果你想在静态上下文中使用它,你的函数需要@staticmethod装饰器:

@staticmethod
def convert(s):
    # Code here

第二件事,在分割location字段时,如果只使用split(),可能会更容易,而不是使用索引和切片。请参阅以下差异:

>>> a = '0.123,0.345'
>>> b = a.index(',')
>>> a[:b]
'0.123'
>>> a[b:]
',0.345' # <-- comma still exists here

如果您使用split(),结果如下:

>>> arr = a.split(',')
>>> arr
['0.123', '0.345']
>>> arr[0]
'0.123'
>>> arr[1]
'0.345'