我有我的表名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='') 诸若此类
但这似乎并不有效。我想问问方向,怎么做才好呢?
发布于 2016-02-01 08:14:52
对树模型的详细解释是这里。
我将要使用的imanigary模型:
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在第二层,您必须将"Building“分配给父级,即"City A”,并且它有#1 ID。
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,例如“子”。
最后,以简短的方式设置:
https://stackoverflow.com/questions/35078028
复制相似问题