0

我正在使用 Django 模型抽象基类从数据库生成我的网站菜单。我的模型如下所示:

# 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 回答