2015-06-02 30 views
0

因此,如果我知道將模型數據序列化爲JSON是多麼困難,那麼我絕不會使用Django的DecimalField選項。django DecimalField - 我如何檢索浮點值?

長話短說,我如何從DecimalField獲得浮動值?

我的模型看起來是這樣的:

class DailyReport(models.Model): 
    earnings = models.DecimalField(max_digits=12, decimal_places=4) 

    def earnings_float(self): 
     return self.earnings.to_float() 

顯然沒有可用to_float()方法,所以我該怎麼辦呢?

下面是後來添加:

這工作:

class DailyReport(models.Model): 
    earnings = models.DecimalField(max_digits=12, decimal_places=4) 

    def earnings_float(self): 
     return float(self.earnings) 

但是,即使這似乎太複雜了。我試圖在所有的序列化中使用django-rest-framework,因爲我通常在我的應用程序中使用它作爲休息框架。在這種特殊情況下我只是想通過pymongo在蒙戈DB改造和序列化我的數據轉換成Python列表和字典,然後將其保存爲文件3.

+0

[什麼?](http://stackoverflow.com/questions/1960516/python-json-serialize-a-decimal-object) –

+0

@ IgnacioVazquez-Abrams沒有充分地處理我的問題 – jononomo

回答

3

只投了DecimalField成float:

def earnings_float(self): 
     return float(self.earnings) 
2

浮點數和小數點不一樣。不要將小數轉換爲浮點數以便序列化它;你會失去精確度。

,而不是僅僅使用DjangoJSONEncoder類工作得很好:

from django.core.serializers import DjangoJSONEncoder 
json.dumps(self.earnings, encoder=DjangoJSONEncoder) 
+0

我注意到DjangoJSONEncoder在django版本1.8中的django.core.serializers.json中,因此語句將從django.core.serializers.json中輸入 import DjangoJSONEncoder – vibhor

+0

我認爲該屬性應該是** cls **而不是**編碼器**。所以序列化語句就像這樣 ** json.dumps(self.earnings,cls = DjangoJSONEncoder)** – vibhor