2

概括

我正在 Django 中构建一个项目 - 并且将使用许多小范围的正十进制值(1.25,0.01等)。在数据库 (MySQL) 中,将它们存储为value*10^precision. 这意味着我可以不用存储一个float类型(4 个字节),而是使用一个SmallInt(2 个字节)。当它是兆字节的数据时,这是 rad。

问题 问题是当 Django 和它PositiveSmallIntegerField()制作一个自动检查“整数”值的小部件时!

选项 1:在模型代码中使用 DecimalField(),每当数据库发生变化时,我都会将 SQL 更新为 SMALLINT(3)。

PRECISION=2

class MyModule(models.Model):

    ...<fields>

    def readySave(self):
        pseudoDecimalField *= 10**PRECISION

    def setValues(self):
        pseudoDecimalField /= 10**PRECISION

    def save(self): 
        # pre-save things here
        self.readySave()
        super(MyModule, self).save()
        # post-save things here
        self.setValues()

选项 2:推/拉值时使用原始 SQL 命令。

非常感谢您对此事的任何意见或经验。有没有人有任何其他方法来实现这一点?

4

1 回答 1

2

问题仅在“前端”部分,因此必须有一种方法可以在不修改数据库的情况下解决问题。最简洁的方法是覆盖表单中字段的小部件。它应该是这样的:

class MyModuleForm(forms.Form):
    ....
    pseudoDecimalField = forms.PositiveSmallIntegerField(widget=forms.TextInput)

您可以在出色的 Django文档中阅读有关小部件的更多信息。

于 2012-11-13T18:54:01.570 回答