首先,感謝任何花時間回答這個問題的人。我對Django和Programming非常陌生(僅僅學習了幾個月)。Django onetomany查詢
我在這個論壇搜索了一些類似於這個查詢的內容,並且在Django中快速閱讀了聚合以嘗試解決這個問題。我讓自己感到困惑,所以我想試着問這個問題,因爲它讓我發瘋。
我想要實現的內容的簡要概述。我正在爲我的網站創建菜單系統,但是通過數據庫執行此操作,以便用戶可以動態地添加/刪除網站菜單。我已經創建了兩個模型(帶有onetomany關係)來覆蓋站點導航的主菜單和子菜單元素。
class Menu(models.Model):
menu_name = models.CharField(max_length=25, verbose_name="Menu Name")
urlconf_name = models.CharField(max_length=25, verbose_name="URLConf Name")
menu_position = models.IntegerField(verbose_name="Menu Position", unique=True)
has_sub_menu = models.BooleanField(default=False, verbose_name="Sub Menu Linked")
active = models.BooleanField(default=True, verbose_name="Menu Active")
def __str__(self):
return self.name
和
class Sub_Menu(models.Model):
sub_name = models.CharField(max_length=25, verbose_name="Sub Menu Name")
urlconf_name = models.CharField(max_length=25, verbose_name="Sub Menu URLConf Name")
menu_position = models.IntegerField(verbose_name="Sub Menu Position")
menu_id = models.ForeignKey(Menu, related_name="name")
所以,我創建了一個主菜單表 「主頁」, 「聯繫我們」, 「鏈接」 和 「類」。子菜單中有與「課程」相關的「課程」和「體操課程」相關的「舞蹈課程」。
現在,我正在努力研究如何有效地查詢這兩個表來創建一個單一的數據集,所以我可以遍歷這個來生成菜單。 I.E.它需要創建一個數據集如下(使用「菜單位置」來訂購數據集的元素)
菜單,班級,舞蹈班,體操班,聯繫我們,鏈接。
我的嘗試如下在我的視圖中通過兩個輔助函數來創建數據集。
def get_menu():
try:
main_menu = Menu.objects.all().order_by('menu_position')
return main_menu
except ObjectDoesNotExist:
return None
def get_submenu(main_menu):
submenu_dict = []
for menu in main_menu:
sub_menu = Sub_Menu.objects.filter(menu_id=menu.main_name).order_by('menu_position')
submenu_dict.append(sub_menu)
# pdb.set_trace()
return submenu_dict
這不工作,因爲我已經不能完全制定出什麼樣的實際使用中menu_id引用正確鏈接MAIN_MENU。我認爲一旦我解決了這個問題,它就會起作用,但我覺得有一種更簡單的方法可以做到這一點,但我現在還沒有讀到。
感謝您的任何幫助。請記住,我對此非常感興趣,所以如果您可以嘗試在您的回覆中提供一些解釋,我將非常感激。
問候
韋恩
謝謝@José_Tomás_Tocino抽空回覆。我試圖應用這似乎工作,但努力找出如何最好地存儲回來的數據以及如何在模板中訪問它。 我想我可能會重新編寫它來利用單一模型來改變循環。目前數據集令我感到困惑,因此我想我需要重新讀取python數據集。 – Smurf
當然,我會像你說的那樣使用代表頂級和子菜單項的單一模型。頂級元素將是沒有父級的元素。這樣更容易。在這種情況下,你也可以使用我提出的解決方案,它也可以。順便說一句,你可以將答案標記爲接受,如果你覺得它☺ –
感謝再次@ Jose_Tomas_Tocino的答覆。如果我可以,另一個快速問題。我已經使用上面的命令來返回數據。你能解釋我如何獲取信息嗎?當我查詢它時,我得到[]。 「舞蹈班」是課程的子菜單。努力通過這個數據結構來訪問sub_menu模型的屬性。謝謝。 –
Smurf