我有一个Django模型,它有一个字段保存为字符串但具有浮点值。
例如:"0.123,0.221"
是存储在Location
列中的字符串。保存时,我希望将这些值分别保存在latitude
和longitude
中作为浮点数。为此我已经完成了以下模型
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)
我该如何解决这个问题?
答案 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'