【问题标题】:obtain django dropdown menu item queryset获取 django 下拉菜单项查询集
【发布时间】:2023-03-13 01:13:02
【问题描述】:

我正在尝试制作一个日历 html 页面,它有一个下拉按钮来选择不同的月份。如何访问此日历页面是通过在base.html 创建的nav bar

base.html - 如何进入日历页面。

....
....
<li class="nav-item dropdown">
    <a class="nav-link dropdown-toggle" data-toggle="dropdown" data-target="scheduler_dropdown" href="#"><i class="fas fa-calendar"></i>Scheduler</a>
    <div class="dropdown-menu" aria-labelledby="scheduler_dropdown">
         <a class="dropdown-item" href="{% url 'view_schedule' %}"><i class="fas fa-calendar-alt"></i>View Schedule</a>
    </div>
</li>

到目前为止我已经构建了什么:

urls.py

urlpatterns = [
    path('schedule/view-schedule/', views.view_schedule, name='view_schedule'),

    path('schedule/view-schedule/?query=month<str:selected_month>', views.view_schedule,
          name='view_schedule_selected_month'),
    ]

Views.py

def view_schedule(request, selected_month=None):
    if request.method == 'POST':
        print('post')
    else:
        current_month = date.today().month  
        current_year = date.today().year  

    # a = request.GET  # How to get query set from dropdown menu???
    # print(a)

    args = {
        'month_cal':  monthcalendar(current_year, current_month),
        'month_name': calendar.month_name[current_month],
        'year_name': current_year,
    }

    return render(request, 'static/html/view_schedule.html', args)

view_schedule.html

<div class="card-header">
    Schedule for {{ month_name }} {{ year_name }}

    <form class="date-selector" method="post">
    {% csrf_token %}

    <div class="dropdown">
        <button class="btn dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
            <i class="far fa-caret-square-down"></i>
        </button>
        <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
            <a class="dropdown-item" href={% url 'view_schedule_selected_month' selected_month=1 %}>Jan</a>
            <a class="dropdown-item" href={% url 'view_schedule_selected_month' selected_month=2 %}>Feb</a>
            <a class="dropdown-item" href={% url 'view_schedule_selected_month' selected_month=3 %}>Mar</a>
        </div>
    </div>
    </form>
</div>

我的问题是,当我单击下拉按钮并选择相关月份Jan, Feb, Mar 时,url 发生了变化,但在我的views.py 中,查询集没有出现。所以我无法提取查询进行处理。

有什么想法吗?

【问题讨论】:

    标签: django html bootstrap-4


    【解决方案1】:

    原来我本来可以完成print(selected_month),它会打印查询结果。我在看这个视频时想到了:https://www.youtube.com/watch?v=qmxoGYCFruM

    【讨论】:

    • 您可以这样做,但不建议通过urlpatterns 处理查询字符串。看我的回答。
    【解决方案2】:

    不要使用urlpatterns 来处理查询字符串。 urlpatterns 只处理 URL 本身;查询参数是 GET 数据的一部分,在回调方法中处理。您需要更改 HTML、urlpatterns 和视图的工作方式以适应这种情况。

    urlpatterns = [
        path('schedule/view-schedule/', views.view_schedule, name='view_schedule'),
    ]
    

    在您的 HTML 中,您需要一个带有下拉列表的表单,该下拉列表将数据获取到上面的 URL。您可以为此使用the select tag

    然后在视图中,您可以从request.GET 中提取GET 数据。具体来说,如果您按照上面的建议使用了select 标记,那么用户的选择将在request.GET[NAME] 中,其中NAME 是select 标记的名称。

    还有其他方法可以解决这个问题,这取决于审美偏好等,但我上面解释的方法可能是最简单的。

    此外,查询集(或 QuerySet)在 Django 中具有非常特定的含义。它指的是数据库查询中使用的一种对象as explained here。 HTML 表单的结果不是“查询集”。

    【讨论】:

      猜你喜欢
      • 2017-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 2023-03-05
      • 2015-11-13
      • 2013-01-23
      • 1970-01-01
      相关资源
      最近更新 更多