2012-05-20 38 views
0

我正在使用Django模型抽象基類從db中生成我的網站菜單。我的模型是這樣的: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') 

這是好的,並且通過位置訂購的主菜單項。但是,子菜單項目沒有排序。我如何確保子菜單項目按位置排序?

回答

1

你試過defining the order in your model's Meta class?只要你沒有問題,position在每種情況下都是默認的順序,它沒有被顯式覆蓋(這可能會對大型查詢產生性能影響),因此應該不再需要使用.order_by()。儘管如此,我還沒有爲您的具體情況嘗試過,所以讓我知道它是否無效。

編輯:也可考慮看相關型號order_with_respect_to

+0

完美!這工作。謝謝。 –