0

Djangoモデルの抽象基本クラスを使用して、データベースからWebサイトメニューを生成しています。私のモデルは次のようになります。

# ABSTRACT MENU 
class Menu(models.Model):
    position = models.IntegerField("Item Position", max_length=2, unique=False)
    title_en = models.CharField("Title (English)", max_length=50)
    title_es = models.CharField("Titulo (Español)", max_length=50)
    url_en = models.URLField("url (English)")
    url_es = models.URLField("url (Español)")       

    def __unicode__(self):
        return self.title_en

    class Meta:
        abstract = True

# top (main) menu ---> inherits from MENU
class MainMenu(Menu):
    class Meta:
        verbose_name_plural = "Menu Items"  

# submenu - for drop downs ---> inherits from MENU
class SubMenu(Menu):
    main_menu = models.ForeignKey(MainMenu, null=True, blank=True)
    class Meta:
        verbose_name_plural = "Sub Menu Items"

次に、メニューに対してこれを行います。

menu_items = MainMenu.objects.all().select_related().order_by('position')

これは問題なく、位置順にメインメニュー項目を生成します。ただし、サブメニュー項目は順序付けられていません。サブメニュー項目も位置順に並べられていることを確認するにはどうすればよいですか?

4

1 に答える 1

1

モデルのクラスで順序を定義してMetaみましたか?いずれの場合もデフォルトの順序で問題がない限り、position明示的にオーバーライドされることはなく(大規模なクエリのパフォーマンスに影響を与える可能性があります)、. order_by()を使用する必要はまったくありません。ただし、特定のケースではこれを試していません。うまくいかない場合はお知らせください。

編集:関連モデルについてはorder_with_respect_toも検討してください

于 2012-05-20T19:00:28.373 に答える