【问题标题】:How to create query filter based on for-loop button clicked如何根据单击的 for 循环按钮创建查询过滤器
【发布时间】:2019-12-26 11:43:32
【问题描述】:

我正在创建一个示例公司网络数据库,主要包含员工记录和资料。在其中一个页面上,我想根据部门显示所有员工。

在我的模型上,部门是一个 CharField 选项。我可以通过在views.py 中创建一个列表理解然后在html 页面上创建一个带有href 标记的forloop 按钮来显示这些部门的列表。现在在我遇到困难的地方。显然,无论单击哪个按钮,for 循环的每个元素都会被重定向到同一页面。我尝试创建一个查询过滤器并传递实际部门的名称,这将起作用。

在我看来,我有这个:

from django.shortcuts import render
from .models import Staff

def depts(request):
    deptList = Staff.department_list
    depts = [x[1] for x in deptList]
    return render(request, 'dsvstaff/depts.html',{'depts':depts})


def theStaffs(request):
    staffs = Staff.objects.filter(department='?')
    return render(request, 'dsvstaff/theStaffs.html',{'staffs':staffs})

然后在我的部门列表页面上:

{% block content %}

<div class="container">
     {% for dept in depts %} 

<a class="btn btn-primary" href="{% url 'theStaffs' %}">{{ dept }}</a>

      {% endfor %}

</div>
{% endblock %}

这个页面是我遇到困难的地方:

{% block content %}

    {% for x in staffs %}
        {{ x.first_name }} {{ x.last_name }} - {{ x.postion }}

    {% endfor %}

{% endblock %}

我想要的是根据单击的按钮在查询过滤器中传递部门名称的名称。

【问题讨论】:

  • 这里的departement_list 是什么?请分享相关模型。
  • 感谢@Willem Van Onsem。这实际上是我想要实现的。添加的参数就是所有需要的。再次感谢

标签: html django-models django-templates django-views


【解决方案1】:

您需要添加一个额外的参数来确定部门:

def staff(request, department):
    staffs = Staff.objects.filter(department=department)
    return render(request, 'dsvstaff/theStaffs.html',{'staffs':staffs})

您还需要将此添加到urls.py

# app/urls.py

from django.urls import path
from app.views import staff

urlpatterns = [
    path('staff/<department>', staff, 'staff'),
    # ...
]
{% block content %}
<div class="container">
    {% for dept in depts %} 
        <a class="btn btn-primary" href="{% url 'staff' department=dept %}">{{ dept }}</a>
    {% endfor %}
</div>
{% endblock %}

但是,将部门存储为CharField 似乎不是一个好主意。由于部门是一个实体,因此为此定义一个模型是有意义的,这样您就可以像 ForeignKey 一样引用它。这将减小数据库大小,使数据库更易于维护,并且更易于更改部门名称。在database normalization [wiki] 上查看更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    相关资源
    最近更新 更多