2016-04-29 18 views
3

かなり標準的なエンティティ属性値の階層を実装する必要があります。各タイプには複数のタイプのデバイスがあり、それぞれのタイプにはさまざまな設定があり、個々のデバイスにはそれぞれの設定ごとに特定の値のセットがあります。 django-eavパッケージとeav-djangoパッケージの両方が保守されていないようですので、自分自身をロールバックする必要があります。しかし、どのように私はこれを設計するのですか?これまでのところ、私はこのようなことを考えています(多くの詳細をスキップします)DjangoでEAVを実装する方法

 
class DeviceType(Model): 
    name = CharField() 

class Device(Model): 
    name = CharField() 
    type = ForeignKey(DeviceType) 

class Setting(Model): 
    name = CharField() 
    type = CharField(choices=(('Number', 'int'), ('String', 'str'), ('Boolean', 'bool'))) 
    device_type = ForeignKey(DeviceType) 

class Value(Model): 
    device = ForeignKey(Device) 
    setting = ForeignKey(Setting) 
    value = CharField() 

    def __setattr__(self, name, value): 
     if name == 'value': 
      ... do validation based on the setting type ... 

    def __getattr__(self, name): 
     if name == 'value': 
      ... convert string to whatever is the correct value for the type ... 

私には何かが欠けていますか?これを行うより良い方法はありますか?これは使えますか?

答えて

-1

私は答えようとしています、私に知らせてください、私たちは同じ飛行機にいます。 EAVデータベースのScemaをまず作成する必要があると思います。そのために、エンティティ、属性、および関連する値が何であるかを識別します。ここで、あなたが言った例では、entityは多分deviceであり、属性はおそらく設定されています。他の例を挙げると、自動車販売の場合、エンティティは販売レシート、属性は顧客(車)が購入した商品、値は価格、車種、車の色などです。 マッピングを格納するマスターテーブルとテーブルを作成しますもしあれば。 models.pyのこのスキーマ実装は、モデルを作成し、それらのモデルにシェルまたは挿入スクリプトを使用して値を挿入します。

+2

まず、この質問が4月に尋ねられました。私は以来、質問に投稿したコードのバージョンを実装しました。それは私にとっては合理的にうまく動作しますが、むしろやや扱いやすい解決策をとることになります。第二に、あなたの答えは非常に一般的です。あなたもDjangoを知っていますか? –

+0

万が一あなたがdjango-eavを使用しましたか?フィルタリングは私のために全く機能しません。 – iMitwe

+0

@iMitweいいえ、私がこの答えを探したとき、Django-eavは水中でかなり死んでいたので、私は上記のコードに基づいて限定版を巻いた。 –

関連する問題