如何从 Django 的下拉列表中从用户的选定选项中进行查询

Posted

技术标签:

【中文标题】如何从 Django 的下拉列表中从用户的选定选项中进行查询【英文标题】:How to make a query from a selected choice from the user from a drop-down list in Django 【发布时间】:2022-01-06 21:20:26 【问题描述】:

我是新来的。在实习环境中,我必须开发一个网站,用户将有机会在其中选择他想在热图中可视化的程序、本地化或主题。

为此,我决定使用 Django。我遇到了 2 个问题:

第一个:我有一个 mysql 数据库,由 1 个表组成,其中包含位置名称(在许多列中详细说明)和坐标,以及一个由原始数据程序组成的表。我需要找到一种方法来连接这两个表,但是一个本地化名称可以有不同的坐标,具体取决于程序。所以我需要按表连接 2 列(我将原始数据中的 2 列连接到带有坐标的表中的两列)

现在我考虑过使用new_var = table.objects.annotate 但我无法加入这两个新变量... 你有什么想法吗?

其次:用户应该从下拉列表中选择一个本地化,我可以使用它来过滤我的数据库并按照他的意愿显示地图。

现在我有:

(views.py)

def map(request):

    m = folium.Map(location=[-17.4889,-149.90017], zoom_start=11, tiles='CartoDB Dark_Matter', control_scale=(True))

    if request.method == 'GET':
        featured_filter = request.GET.get('site_name')

        if request.GET.get('nom_site'):
            data_list = table.objects.filter(localisation = featured_filter).values_list('latitude', 'longitude', 'proportion')

    else :
        data_list = table.objects.all().values_list('latitude', 'longitude', 'proportion')

    plugins.HeatMap(data_list).add_to(m) 

    m = m._repr_html_()

    context = 
        'm': m,
        "showname": name
    

    return render(request, 'map.html', context)

(map.html)

<div class="md-5 mt-5"> 
     
    <p class="mt-2 text-center"> Select a site </p>
        <select class = "form-select" method = "get" aria-label = "Default select example" action="showResult">
            % for nom in showname %
            <option value = "lieu.id" name = "site_name" method="get" id="select_site"> name.localisation </option>
            % endfor % 
        </select>
 </div>

我的问题是featured_filter 是一个空的查询集。那么我可以从 html 接口中获取选定的值到我的 python 代码中吗?

感谢您的帮助!

【问题讨论】:

【参考方案1】:

我不太明白你到底想要什么,但我会给你一系列提示,看看它们是否能帮助你:

1 - 如果您需要连接两个数据库表,您可以使用多对多关系 (Documentation)

2 - 这个问题可能最好用表单和 POST 方法来解决:

    用户选择选项 使用 POST 方法发送表单 运行执行过滤的函数 该函数通过上下文返回结果并重新渲染 HTML。

3 - 如果您不想使用表单,您可以创建自定义模板标签和 javascript。这种方法比较复杂,不推荐。 (Custom template tag) (InnerHTML Javascript)

【讨论】:

以上是关于如何从 Django 的下拉列表中从用户的选定选项中进行查询的主要内容,如果未能解决你的问题,请参考以下文章

从 Django 表单 ChoiceField 中检索选定的选项

如何从下拉列表中继续显示选定的选项?

如何在 Laravel 5 下拉列表中检索选定选项的值?

从角度的下拉列表中删除选定的选项

从 Angular 的下拉列表中删除选定的选项

如何使用 Angular JS 设置下拉列表控件的选定选项