0

django モデルと継承に問題があります。

ダッシュボードとモジュールのリストを次のように定義します。

class Dashboard(models.Model):
    name = models.CharField(max_length=255)


class DashboardModule(models.Model):
    dashboard = models.ForeignKey(Dashboard, related_name='modules')
    position_line = models.IntegerField(default=1)
    position_col = models.IntegerField(default=1)

    def render(self):
      return 'hehe'

class Custom1DashboardModule(DashboardModule):
    #custom fields and methods
    def render(self):
      return 'toto'

class Custom2DashboardModule(DashboardModule):
    #custom fields and methods
...

私は次のようなコードを使用します:

dashboard = Dashboard()
dashboard.name = 'my dashboard'
dashboard.save()

module = Custom1DashboardModule()
module.dashboard = dashboard
module.save()

module = Custom2DashboardModule()
module.dashboard = dashboard
module.save()

それから私がするとき

dashboard.modules.all() 

カスタムではなく、DashboardModule のリストを取得します。理由はわかりますが、これは問題です。

私の問題を解決する解決策はありますか? 多分私はアーキテクチャを再考する必要がありますか?

4

2 に答える 2

1

Django は自動的にモデルをダウンキャストしません。モデルの自動ダウンキャストに関する Jeff Elmoreの投稿が役に立ちました。その中で、彼はdjango-model-utilsdjango-polymorphic-modelsに言及し、独自のソリューションを提供しています ( https://bitbucket.org/Enzondio/django-model-utils/overview )。

于 2013-08-01T10:34:36.197 に答える
0

これは非常に奇妙に見えます。ここで継承を使用する理由は何ですか? django では、すべてのモデルがデータベース内のテーブルです (またはabstract=True、メタ設定に含まれていない限り、ほとんどすべてのモデルがそうです)。ダッシュボードに関連するものは DashoardModule だけであるため、クエリによって正しい結果が得られます (ここで使用している の標準objectsマネージャーを変更したと仮定します)。modulesデータベースの外観に合わせて、アーキテクチャを再考してください。

次のリンクを確認してください。

于 2013-08-01T10:06:59.447 に答える