2

概要

私はDjangoでプロジェクトを構築しています-そして、多くの小さな範囲の正の10進値(、、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 に答える