我创建基本上存储的鞋码,以及其他信息的应用程序。我一直在使用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. 如何使用Django的智能选择
- 5. Django的智能/链接选择manytomanyfield
- 6. 智能复数总是智能?
- 7. Django的JSON场形成场
- 8. Django的DATATIME场
- 9. django智能选择应用程序
- 10. 排序在Django智能选择
- 11. 智能查询Django中,与用户
- 12. 道场 - lang.hitch的小工具功能
- 13. 智能班级参数和智能变量的区别
- 14. NHibernate的智能预取在1到许多场景
- 15. 智能调整大小背景
- 16. 智能调整图像预览大小?
- 17. wkhtmltopdf - 启用智能收缩不缩小
- 18. 智能小部件更新(不定期)
- 19. Django CSS不能在现场工作
- 20. 带智能参数的Powershell功能
- 21. 与少数机型的Django模型场
- 22. 智能指针在智能指针管理数组内
- 23. 智能数独高尔夫
- 24. 智能数据库搜索
- 25. 智能(?)数据库缓存
- 26. 智能指针和数组
- 27. 智能指针数组
- 28. 数组和智能指针
- 29. 命名参数和智能
- 30. 如何在Java中做智能小数点切断?
它实际上并不会将它存储为DecimalField中的int类型。你可能想看写一个模板标签或模型方法输出一个打印的十进制数字为整数 –
我需要的价值被存储为收到,所以我可以从数据库中导入它,而不必担心大约.0 – Paulo
也许只使用一个CharField有严格的清洁方法 –