Bin*_*yak 6 django django-admin
我的情况:
我有三个表,类别,子类别,产品。插入新产品时,有两个选择框
1)第一选择是类别(其工作)
2)第二个用于子类别,该类别应与第一个选择相关。需要从子类别表中获取数据。
子类别表具有类别ID作为外键。我是初学者,请帮助。
您将不得不使用一些我喜欢的JS库
JQuery
。
为了填充此子类别字段,您必须创建一个将以json数据作为响应的视图。
from django.http import HttpResponse
import json
def get_subcategory(request):
id = request.GET.get('id','')
result = list(Subcategory.objects.filter(category_id=int(id)).values('id', 'name'))
return HttpResponse(json.dumps(result), content_type="application/json")
Run Code Online (Sandbox Code Playgroud)
您需要在urls.py上添加一个模式以到达视图:
url(r'^/getSubcategory/$', views.get_subcategory)
Run Code Online (Sandbox Code Playgroud)
现在,您必须为产品应用覆盖django admin的change_from.html,以添加一些JS代码来完成此任务。
your_project
|-- your_project/
|-- myapp/
|-- templates/
|-- admin/
|-- myapp/
|-- change_form.html # do not misspell this
Run Code Online (Sandbox Code Playgroud)
注意:此文件的位置并不重要。您可以将其放入您的应用程序中,并且仍然可以使用。只要它的位置可以被django发现。更重要的是,HTML文件的名称必须与django提供的原始HTML文件名相同。
在您的change_form.html中,编写如下内容:
{% extends "admin/change_form.html" %}
{% block extrahead %}
{{ block.super }}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript" charset="utf-8">
$(function(){
// inspect html to check id of category select dropdown.
$(document).on('change', "select#id_category", function(){
$.getJSON("/getSubcategory/",{id: $(this).val()}, function(j){
var options = '<option value="">---------</option>';
for (var i = 0; i < j.length; i++) {
options += '<option value="' + j[i].id + '">' + j[i].name + '</option>';
}
// inspect html to check id of subcategory select dropdown.
$("select#id_subcategory").html(options);
});
});
});
</script>
{% endblock %}
# Create a JS file and put this second script tag in it, that way will be easier to maintain your template.
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1873 次 |
最近记录: |