2012-03-21 12 views
1

同じマナーで使用されるいくつかのオブジェクトがあります。このオブジェクトは、このオブジェクトの事前定義された型に分類されます。各タイプには、このタイプのオブジェクトに属するプロパティがあります。モデルでこれを取得するに は、私は心の中でモデルのため、このテーブルを持っていた:Djangoデータベースモデル:オブジェクトのタイプに応じたフィールド

(/説明とタイプに属する事前に定義されたプロパティを持つオブジェクト
  • 一つのテーブルの種類と
    • 一つのテーブルフィールドのヘルプテキストは、プロパティrequierd、フィールドの種類とその上にある)
    • その 性質を持つテーブルとの関係(このリスト内の次の1)
    • 一つのオブジェクトの一つのテーブルオブジェクトのプロパティと値を持つテーブル( 定義済みの小道具

    これは機能しますが、一緒に作業するにはプログラミングが必要です。

    この解決策の別の問題は、プロパティのフィールドタイプです。これは異なる場合があります。だから、私は1つのフィールドタイプ(charField)を使用してそれを解析しようとするか、または最もよく使われるフィールドタイプ(value_integer = models.IntegerField)を持つ異なる値フィールドを持つテーブルを作成します。この場合、プロパティごとに1つのフィールドを埋め込むだけでemtpyフィールドがたくさん得られます。実際に私は何らかの辞書を探しています...

    これが正しい方法であるかどうかわかりません。

  • 答えて

    0

    Djangoのやり方は、すべてのDjangoの機能(管理者、フォーム、外部アプリなど)が期待するように、オブジェクトタイプごとに1つのモデルクラスを定義することです。例えば、

    あなたはスーパークラスを定義することができますし、model inheritance使用:

    class BaseThing(models.Model): 
        # fields/relations for all types of things 
    
    class FooThing(BaseThing): 
        # fields/relations for things of type "foo" 
    
    class BarThing(BaseThing): 
        # fields/relations for things of type "bar" 
    

    が、次のことができ、通常通りpredefine defaultsを。

    ユーザーが管理者にクラスを作成させたい場合は、別のフレームワーク(eZ Publish)を考慮してください。

    +0

    これは行いますが、fooまたはbarのいずれのものであれ、すべてのものをループする方法よりも独立していますか?あなたがBaseThingテーブルをquiryした場合、他の拡張されたものは得られませんよね? –

    +0

    私はdjangoのドキュメントでそれを見つけました:https://docs.djangoproject.com/en/dev/topics/db/models/#multi-table-inheritance –

    +0

    もちろん、BaseThingをクエリできます。 djangoがすでに提供しているものにもっと多くの機能を提供するすばらしいアプリがいくつかあります:https://github.com/carljm/django-model-utils https://github.com/bconstantin/django_polymorphic – jpic

    関連する問題