当用户从下拉列表中选择一个项目时,我想在前端,一种信号被发送到Django后端,并且选择了项目的主键。
Models.py:
class Company(models.Model):
name = models.CharField(max_length=10, blank=True, null=True)
code = models.CharField(max_length=2, blank=True, null=True)
我将此模型发送到HTML并将其解压缩:
{% load staticfiles %}
{% load i18n %}
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form action="" method="GET" id="selection-form">
{% csrf_token %}
<select>
{% for company in company_list %}
<option>
{{ company.name }}
</option>
{% endfor %}
</select>
<input type="button" value="Update" id="selection-button">
</form>
</body>
</html>
现在,用户选择选项,例如公司A,公司B和公司C.如果用户选择说公司A并单击“更新”按钮,它会将主键发送到views.py
Views.py:
def company_selected(request):
if request.method === 'GET':
selection = request.GET.get() // Not sure what to have within .get()
selected_company = Company.objects.filter(pk=selection)
return selected_company
我实际上不确定我是否在views.py中正确地执行了此操作。从前端发送什么样的信号有助于识别所选选项的主键?
答案 0 :(得分:3)
您需要修改自己的html文字,才能将id
添加到select
。
html的
<select id = "company-list">
{% for company in company_list %}
<option value="{{ company.id }}">
{{ company.name }}
</option>
{% endfor %}
</select>
单击该按钮时,您可以使用.click
函数向您的视图发送ajax
调用。因此修改.js文件:
// ajax call on your button click
var url = $( '#selection-form' ).attr( 'action' );
$("selection-button").click(function(e) {
e.preventDefault();
$.ajax({
type: "GET",
url: url,
data: {
id: $('#company-list').val();,
},
success: function(result) {
alert('ok');
},
error: function(result) {
alert('error');
}
});
});
最后,在视图中你可以像这样使用它 views.py
def company_selected(request):
if request.method == 'GET':
selection = request.GET.get('id',None)
if selection:
selected_company = Company.objects.filter(pk=selection)
return selected_company
else:
return #anything you want to send when no id value is sent in the ajax call