首页 > 解决方案 > 在 Django 1.11 中构建嵌套 URL 时面临的问题

问题描述

我正在尝试创建一个层次结构,在主页用户可以选择在其主页中选择位置,然后一旦他们选择了位置,他们就会从该位置获得相应的经理,然后一旦他们选择了他们获得相应员工的经理。

图表->(主页)所有位置-选择特定位置->经理-选择特定经理->员工列表(与经理对齐)

网址模式:

urlpatterns = [

    url(r'^$', views.index, name='index'),
    url(r'^(?P<hierarchy_id>[0-9]+)/$', views.managerview, name='managerview'),
    url(r'(?P<associate_id>[0-9]+)/$', views.associatelist, name='associatelist'),

]

意见:

def index(request):
    all_sites = Hierarchy.objects.all()
    return render(request, "adash/index.html", {'all_sites': all_sites})


def managerview(request, hierarchy_id):
    all_managers = Hierarchy.objects.get(pk=hierarchy_id)
    return render(request, "adash/manager.html", {'all_managers': all_managers})


def associatelist(request, associate_id):
    all_logins = Hierarchy.objects.get(pk=associate_id)
    return render(request, "adash/associatelist.html", {'all_logins': all_logins})

管理器 HTML

<a class="list-group-item list-group-item-action"><h5 class = "text-monospace">{{ all_managers.direct_manager }}</h5></a>

关联 HTML

<a class="list-group-item list-group-item-action"><h5 class = "text-monospace">{{ all_logins.login }}</h5></a>

当前可以单击位置并将其定向到与该站点关联的相应经理,但如何进行下一步,即单击经理并显示关联列表。

下面是我的模型:

class Hierarchy(models.Model):
    site = models.CharField(max_length=250)
    direct_manager = models.CharField(max_length=250)
    login = models.CharField(max_length=250)

标签: pythondjango

解决方案


您的direct_manager字段必须是关系,而不是文本字段。这是一种递归关系,其中 Hierarchy 的一个实例指向另一个作为其管理器的实例。所以:

direct_manager = models.ForeignKey('self', related_name='direct_reports')

现在,给定一个作为经理的 Hierarchy 实例,您可以通过反向关系获取所有员工:

associates = my_manager.direct_reports.all()

推荐阅读