2011-11-10 12 views
0

私はページメニューの基本的な管理を可能にするためにDjango管理者を使用しようとしています。私は必要に応じてドロップダウンを可能にするサブメニューで拡張することを決めた1つのプリンシパルメニューを持っています。サブメニュー項目はメインメニュー項目と同じ項目を持つため、継承を使用することをお勧めします。したがって、サブメニューはメインメニューからすべての項目を継承するだけでなく、外部キー関係を持つようになります。両方のモデルでDjangoモデルの継承データを保存

# main menu 
class MainMenu(models.Model): 
    title = models.CharField(max_length=50) 
    url = models.URLField()  

    def __unicode__(self): 
     return self.title 

    class Meta: 
     verbose_name_plural = "Main Menu Items" 

# submenu - for drop downs 
class SubMenu(MainMenu): 
    main_menu = models.ForeignKey(MainMenu, related_name='+', null=True, blank=True) 

    class Meta: 
     verbose_name_plural = "Sub Menu Items" 

は私が管理してモデルを登録し、私はサブメニュー内の項目を保存するときだけでなく、それがメインメニューで同じエントリを行い、サブメニューに入りありません。私が間違っていることは何ですか? DjangoにMainMenuのメソッドを継承せずに保存することをDjangoに何らかの方法で伝える必要がありますか?どんな助けでも大歓迎です。

答えて

2

しかし、それはモデル継承の仕組みです。 SubMenuにはMainMenuとの暗黙のOneToOne関係がありますが、 "継承された"フィールドは実際にMainMenuに属します。

あなたができることは、BaseMenu抽象モデルを定義することです - 内側のメタクラスにabstract = Trueを使用してください。 MainMenuとSubMenuはどちらも継承しますが、SubMenuはmain_menuのリンクを追加します。

+0

これは、継承がdjangoでどのように機能するかです。だからあなたはあなたに最も合ったものを選ぶ必要があります:継承や外来キー。両方を使うのは意味がありません – juliomalegria

+0

ベースクラスの作成を避けることで時間を節約できると思っていましたが、実際はとても速かったです。これは間違いなくそれを行う方法です。すべての有用な入力をありがとう! –

関連する問題