python - 带有 ajax 的 Django 依赖下拉列表。我是否需要将我的模型划分为 3 个不同的模型才能实现依赖下拉菜单?
问题描述
我的 django 中有描述汽车的模型。它有字段:
- 制作
- 模型
- 价格
我想让用户通过 django 表单为他们创建查询,我想实现依赖下拉菜单。当用户选择“make”时,可用的“models”会改变。
我看过一些教程,但似乎所有教程都会将我的模型车分成三个不同的模型,但外键。我想它看起来像这样:
Makes:
- name
Models:
- make (foreign key)
- name
Car:
- price
- make (foreign key)
- model (foreign key)
我想知道,是否有可能以某种方式以 django 形式实现这个依赖下拉列表,同时只保留 1 个汽车模型?如果是这样,我应该用谷歌搜索什么?
谢谢。
解决方案
我设法通过对此链接的解决方案进行小幅编辑来做到这一点: https ://simpleisbetterthancomplex.com/tutorial/2018/01/29/how-to-implement-dependent-or-chained-dropdown-list-with- django.html
就我而言,模板中的 ajax 调用如下所示:
{#Ajax call for loading up models based on selected make.#}
<script>
$("#id_make").change(function () {
const url = $("#SearchForm").attr("data-models-url");
const makeId = $(this).val();
$.ajax({
url: url,
data: {
'make': makeId
},
success: function (data) {
$("#id_model").html(data);
}
});
});
</script>
网址.py:
# Ajax:
path('ajax/load_models/', templates_views.load_models, name='ajax_load_models'),
视图中的 ajax:
# This view is for AJAX call.
def load_models(request):
make = request.GET.get('make')
models = Car.objects.filter(make=make).values('model').annotate(count=Count('make')).order_by('count').distinct().reverse()
models_count = []
for model in models:
models_count.append(Car.objects.filter(model=model['model']).count())
data = zip(models, models_count)
return render(request, 'car_prices_tool/models_dropdown_list_options.html', {'data': data})
models_dropdown_list_options.html:
<option value="">--- choose model ---</option>
{% for model, count in data %}
<option value="{{ model.model }}">{{ model.model }} ({{ count }})</option>
{% endfor %}
我相信这就是全部,多亏了我不必创建更多模型。我只能用一个。
推荐阅读
- javascript - 可以在 HTML 正文的末尾注册 Web 组件(JavaScript 原生)吗?
- python - 多尺度模板匹配,规范方法不起作用
- mysql - Mac 更新并重新启动后,我的 sql 服务器无法工作 - 错误 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'
- language-agnostic - 基于堆栈的语言:寄存器的优缺点?
- javascript - 为什么我的 Discord 机器人会从其他渠道删除消息而不向变量添加值?
- python - Python程序实现一个矩阵来表示树的父-(子)子关系
- reactjs - 尝试将 React Spring 与 Semantic UI React 一起使用,简单示例
- django - Django如何将旧格式的url转换为新的格式路径
- javascript - React - Elements UI - 通过包装 div 大小隐藏的下拉菜单
- c++ - 如何在 C++ 中将十六进制 shellcode 字符串转换为无符号字符数组?