我創建基本上存儲的鞋碼,以及其他信息的應用程序。我一直在使用Django Decimal字段來存儲大小,但是十進制字段像10一樣存儲大小爲10.0,所以我的問題是,有沒有辦法使或如果已經存在一個字段,當提供一個int(10)它將該值存儲爲int,並在提供小數點後 (10.5),然後將其存儲爲小數?Django的智能小數場
回答
TBH的鞋碼現場我可能會使用一個CharField有選擇屬性 - 有有效的鞋碼的數量相對較少,並且這樣你可以格式化你想怎樣。
如果它可能包含鞋子以外的東西產品模型的一部分,一個CharField爲「尺寸」是有用的,因爲你還可以存儲像「M」,「L」,「XXL」等
值您不需要對鞋號進行任何數學運算,因此使用DecimalField毫無意義。
出於這個原因,它並不重要,什麼是保存在數據庫中,只有你顯示和@j_syk有一對夫婦的沿着評論這些線路很好的選擇建議。
以'M','L'等爲佳。甚至有些鞋子的尺寸也是這樣,就像一些拖鞋和涼鞋一樣。猜猜這取決於存儲的數據是關於鞋子還是關於一個人的鞋子尺寸(即,我永遠不會說我的鞋子尺寸是XL)。 –
我選擇了使用charfield進行選擇,現在我想它是最簡單的方法:) – Paulo
不只是強制轉換爲你一個字符串的工作?您可以保留原有存儲空間,但在展示數據時根據自己的喜好設置數字格式。
>>> str(Decimal(10))
'10'
>>> str(Decimal(10.5))
'10.5'
>>> str(Decimal(10.0))
'10'
我採用了這種解決方案:
- 創建自定義Django model Field
- 它會返回一個自定義
decimal.Decimal
實例實現把戲__unicode__
因爲這只是一種表象的事情
這裏摘錄:
class PyPrettyDecimal(decimal.Decimal):
def __unicode__(self):
# TODO: to improve with decimal properties ?!?
mod = self - int(self)
if not mod:
rv = int(self)
else:
rv = self.quantize(mod.normalize())
return unicode(rv)
class PrettyDecimalField(models.DecimalField):
__metaclass__ = models.SubfieldBase
def to_python(self, value):
if value is None:
return value
try:
return PyPrettyDecimal(value)
except decimal.InvalidOperation:
raise exceptions.ValidationError(self.error_messages['invalid'])
- 1. Django智能選擇
- 2. Django的ChainedForeignKey智能菜單
- 3. 如何智能合併Django數據庫?
- 4. 智能CSS縮小器?
- 5. 如何使用Django的智能選擇
- 6. Django的智能/鏈接選擇manytomanyfield
- 7. 智能複數總是智能?
- 8. Django的JSON場形成場
- 9. Django的材料Django的智能選擇錯誤
- 10. Django的DATATIME場
- 11. 智能查詢Django中,與用戶
- 12. django智能選擇應用程序
- 13. 排序在Django智能選擇
- 14. 道場 - lang.hitch的小工具功能
- 15. 智能班級參數和智能變量的區別
- 16. NHibernate的智能預取在1到許多場景
- 17. 在ggplot面軸小數的智能號標籤
- 18. 智能調整大小背景
- 19. 智能小部件更新(不定期)
- 20. wkhtmltopdf - 啓用智能收縮不縮小
- 21. 智能調整圖像預覽大小?
- 22. Django CSS不能在現場工作
- 23. 爲Django的像場
- 24. 帶智能參數的Powershell功能
- 25. 市場上的智能手錶和智能無線耳機專業版應用程序
- 26. 小數場工作正常
- 27. 與少數機型的Django模型場
- 28. 智能指針在智能指針管理數組內
- 29. 智能(?)數據庫緩存
- 30. 智能數獨高爾夫
它實際上並不會將它存儲爲DecimalField中的int類型。你可能想看寫一個模板標籤或模型方法輸出一個打印的十進制數字爲整數 –
我需要的價值被存儲爲收到,所以我可以從數據庫中導入它,而不必擔心大約.0 – Paulo
也許只使用一個CharField有嚴格的清潔方法 –