[英]How to design hierarchy (tree) table to display Drop-down menu?
我有表名Layer
其中有4個字段: layer1,layer2,layer3,layer4
該模型
class Layer(models.Model):
layer1 = models.CharField(max_length=255)
layer2 = models.CharField(max_length=255)
layer3 = models.CharField(max_length=255)
layer4 = models.CharField(max_length=255)
因為它不是標准格式
它可以是city/Building/Floor/department
或city/Floor/department
這取決於用戶,僅規則至4層
例如:
layer 1 : city A
layer 2 : Building A
layer 3 : 12 F
layer 1 : city A
layer 2 : Building A
layer 3 : 10 F
layer 4 : department A
layer 1 : city B
layer 2 : 3 F
layer 1 : city B
layer 2 : 3 F
layer 3 : department A
設置完成后,我們需要在網頁上顯示類似於下拉菜單的菜單,在此處輸入鏈接說明
我現在的想法是先查詢,用戶可以選擇layer1
layer1 = Layer(Q~(layer1=''),layer2='',layer3='',layer4='')
如果他選擇city A
,那么
layer2 = Layer(layer1='city A',Q(layer2=''),layer3='',layer4='')
如果他選擇Building A
,那么
layer3 = layer2.filter(layer2='Building A',Q(layer3=''),layer4='')
等等
但這似乎沒有效果。 我想問問如何做到這一點很好???
這里是樹模型的詳細解釋。
我將使用的原始模型 :
class NameOfTabel(models.Model):
"""docstrings"""
parent_id = models.ForeignKey('self', null=True, blank=True) # For 1.7 v. In 1.9 it's slightly different
layer = models.CharField(max_length=255)
在開始之前,應該將此模型填充在管理區域中或通過預先填充的腳本填充,因為如果需要的話,很難為每一層設置驗證。
該表有3列:
id | parent_id | layer
第一層必須將parent_id
字段為空。
id | parent_id | layer
1 | | city A
在第二層中,您必須將“建築物A”分配給父級,即“城市A”,並且其ID為#1。
id | parent_id | layer
2 | 1 | building A
在第三和第四層中的設置相同。
id | parent_id | layer
3 | 2 | 12 F
4 | 3 | department A
(如果某些層可能為空,則將CharField更改為null=True
。)
如果從上面看,您可能會明白為什么將其稱為樹。 如果您看到它看起來像這樣:(我添加了更多行)
city A
building A
12 F
department A
building B
1 F
department B
city B
building A
2 F
department A
為了在“終端”中顯示,查詢中必須有(左側)聯接,我希望您可以這樣做(擁有這么多的信譽點)。
layer1 | layer2 | layer3 | layer4
city A | building A | 12 F | department A
city A | building B | 1 F | department B
city B | building A | 2 F | department A
現在,如何在您提供的鏈接中查詢表的用途:
NamOfTable.objects.filter(parent_id__isnull=True)
NameOfTable.objects.filter(parent_id=id_from_ajax_call)
如果仔細看,您會看到一些重復的代碼,因此我建議將表加載到1個變量中,並查詢放置在變量中的#2,#3,#4,例如“ child”。
最后,以簡短的方式進行設置:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.