2011-10-25 7 views
1

私は基本的に他の情報と一緒に靴のサイズを格納するアプリを作成しています。私はサイズを格納するためにDjango Decimalフィールドを使用していますが、小数フィールドは10のようなサイズを10.0として格納していますので、私の質問は、作成する方法があるか、またはint(10)値をintとして格納し、小数点が与えられた場合は (10.5)を小数点として格納しますか?djangoスマート小数点フィールド

+0

それは実際にはDecimalFieldにint型として格納されません。テンプレートのタグやモデルメソッドを書いて、小数点以下の数字を出力することもできます。 –

+0

値を受け取って保存する必要があるので、データベースからインポートすることができます.0 – Paulo

+1

については、CharFieldを厳密なクリーンメソッド –

答えて

3

TBH属性 - 有効な靴のサイズの比較的少数とあなたがしたいそれらをどのようにフォーマットすることができる方法があります。

それは靴以外のものが含まれていてもよい製品モデルの一部だ場合は、「M」のような値が、「L」、「XXL」など

をも格納することができますので、「サイズ」のCharFieldですが便利です

靴のサイズを計算する必要はないので、DecimalFieldを使用する必要はありません。

そのため、dbに保存されている内容は表示されません。@j_sykには、コメント内のこれらの行に沿っていくつかの良い候補があります。

私はこのソリューションを採用した
+0

「M」、「L」などの良い点。スリッパやサンダルのように、このようなサイズの靴でさえ、記憶されたデータが靴に関するものか、靴のサイズに関するものか(つまり、靴のサイズがXLであるとは決して言いません)かどうかによって決まります。 –

+0

私は選択肢があるチャーフィールドを使用することを選んだ、私は今のところ最も簡単な方法を考え出した:) – Paulo

2

文字列に変換するだけでは機能しませんか?そのままの状態で保管することができますが、データを提示するときに好きなように番号をフォーマットしてください。私はおそらく選択肢がCharFieldですが使用したい靴のサイズフィールドの

>>> str(Decimal(10)) 
'10' 
>>> str(Decimal(10.5)) 
'10.5' 
>>> str(Decimal(10.0)) 
'10' 
+0

私はこれについて考えたことはありません、あなたはこのための最善のアプローチだろうと思います。つまり、この機能を追加するためにカスタムフィールドを書く必要がありますか? – Paulo

+0

'CharField'を[初期値](https://docs.djangoproject.com/en/dev/ref/forms/fields/#initial)で使用して、望みどおりに表示することができます。文字列)。保存するときに、 'Decimal'クラスがそれを保存しますので、心配はありません:うまくいくでしょう。 – jro

+0

しかし、小数点以下のクラスがそれを保存すると、それは.o? – Paulo

1

  1. これはここ

がある表現するだけですので、カスタム__unicode__にトリックを実装するカスタムdecimal.Decimalインスタンスを返しDjango model Field

  • を作成します。スニペット:

    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']) 
    
  • 関連する問題