2009-02-26 3 views
2

私は Django - 仮想フィールドを使用したモデルの設計?それは、このようなジャンゴで以下のように仮想フィールドを持つモデルを設計することになると

は、我々は、システム内のオンラインストアおよびすべての製品を構築しているとしましょう...最もエレガントなアプローチについてお尋ねしたいのですが「 Product」というモデルで定義されています。

class Product(models.Model): 
    # common fields that all products share 
    name = ... 
    brand = ... 
    price = ...  

しかし店は、お互いに完全に無関係な製品の種類がたくさんありますので、私は、すなわち(異なる製品タイプのこれらの仮想フィールドを格納するためのいくつかの方法が必要です。MP3プレーヤーの容量、書籍のPAGECOUNT ,. )。私は私の生のDjangoのスキルを考え出すことができ

ソリューションは完璧にこれまでには程遠いです:「custom_fields」プロパティ と私は手動で管理する 中間テーブルを持つ

  • 。 (:) 私の顔に醜い叫ん)

  • やPythonの 危険な幹部-evalの文でオンザフライ 「製品」からクラスを継承(それもメンテナンス と、実装のための 多くのブードゥー教の魔法です にはDjangoの内部知識が必要です)。

これはあなたのテイクですか?

TIA。

答えて

13

製品には機能があります。

class Feature(models.Model): 
    feature_name = models.CharField(max_length=128) 
    feature_value = models.TextField() 
    part_of = models.ForeignKey(Product) 

このようにしてください。

フィーチャーの一覧です。

p= Product("iPhone", "Apple", 350) 
p.save() 
f= Feature("mp3 capacity", "16Gb", p) 
f.save() 

必要に応じて、機能名のマスターリストを別の表に含めることができます。機能を過剰に分析しないでください。あなたはそれらに対して何も処理することはできません。あなたがしているのはそれらを提示することだけです。

+1

共通フィールドを持つ抽象モデルもこれを処理するのに便利です。 –

3

Ruby on Railsには、テキストフィールドに辞書をパックすることができる「シリアル化」フィールドがあります。多分DJangoは何か類似している?

This articleには、SerializedDataFieldの実装があります。

0

移動します。ただし、カスタムJSONフィールドを作成することもできます。 Create独自の追加フィールドを使用してサブクラスを作成します。

関連する問題