我正在使用Django模型抽象基类从db生成我的网站菜单。我的模型看起来像这样:
# 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')
这很好,并生成按位置排序的主菜单项。但是,子菜单项不是订购的。如何确保子菜单项也按位置排序?
答案 0 :(得分:1)
你试过defining the order in your model's Meta
class吗?只要你可以position
作为默认顺序,在每种情况下它都没有明确地被覆盖(这可能会对大型查询产生性能影响),这样就不需要使用.order_by()了。我没有为你的具体案例尝试过这个,所以如果它不起作用,请告诉我。
编辑:还要考虑查看相关模型的order_with_respect_to