現在、私はdjangoプロジェクトでバリューオブジェクトパターンを使用したいと考えています。私はこのようなクラスPrice
を持っている:djangoモデルのValueObjectパターン
class Price(object):
def __init__(self, value, currency):
self.value = value
self.currency = currency
そして今、私は、通常のモデルでこのクラスを使用します。質問は簡単ですが、モデルでどのように使うべきですか?どんなタイプのフィールドですか?
私の最も重要な要件は、私がモデルのインスタンスで直接価格にアクセスできることです。私はこのような何かを書くことができるように:
item.price.in(Currency.EURO)
は、だから、私は、データベースにJSONとして価格を格納する場合、例えば、デシリアライズのために呼び出すために、いくつかのメソッドを呼び出す必要はありません。
ありがとうございました!
編集
質問が十分に明確ではなかった、私はより詳細な説明を作成したので:(!ないDjangoのモデル)
私は、通常のPythonのクラスPrice
を持って
class Price(object):
def __init__(self, value, currency):
self.value = value
self.currency = currency
そして私はdjangoモデルItem
を持っています。
class Item(models.Model):
name = models.CharField(max_length=100)
# other not necessary fields
は今、私はitem.price.in(DOLLAR)
またはitem.price.in(EURO)
ような何かを書くことができItem
でprice
を持っていると思います。私もが、私はクラスPrice
にmodels.Model
のサブクラスを作成する必要がありForeignKey
Price
への持っている必要はありません
class Item(models.Model):
name = models.CharField(max_length=100)
price_value = models.FloatField()
price_currency = models.IntegerField(choices=Currency.CHOICES)
:しかし、私はこのようなItem
に2つのフィールドを作成したくないん。
class Item(models.Model): name = models.CharField(max_length=100) price = models.ForeignKey(Price)
は、そこで問題は、どのように私はItem
(Djangoのモデル)でPrice
(ないDjangoのモデル)を保存することができますか?私はあなたがより良い、あなたはあなたの価格を与えるために、モデルのメソッドを持つことができ、モデルのフィールドとしてvalue
とcurrency
を定義すると思う
:あなたは本当に柔軟になりたいが、クラスの機能は同じですか? – nephlm
可能性もありますが、私はそれ自身のモデルなしで試してみたかったのです。 –