2017-07-30 80 views
0

当用户从下拉列表中选择一个项目时,我需要在前端,一种信号被发送到Django后端并且所选项目的主键。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

如果您希望在选择元素时更新表单(即,没有提交表单作为一个整体),你需要使用AJAX。 –

+0

另外,Python中没有'==='。但是'is'运算符。 –

回答

1

您需要修改您的html a liitle才能将id添加到select

的.html

<select id = "company-list"> 
    {% for company in company_list %} 
    <option value="{{ company.id }}"> 
     {{ company.name }} 
    </option> 
    {% endfor %} 
</select> 

当按钮被点击就可以使用.click功能的ajax呼叫发送到view.so修改你.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 
相关问题