我的情景:
我有三个表,分类,子类别,产品。 插入新产品时,有两个选择框
1)第一个选择是类别(工作)
2)第二个是Subcategory,它应与第一个选择相关。需要从子类别表中获取数据。
子类别表将类别ID作为外键。 我是初学者,请有人帮忙。
答案 0 :(得分:3)
你必须使用我喜欢的一些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")
在urls.py,你需要添加一个模式来到达视图:
url(r'^/getSubcategory/$', views.get_subcategory)
现在,您必须覆盖django admin的 change_from.html ,以便为您的产品应用添加一些JS代码来实现这一目标。
your_project
|-- your_project/
|-- myapp/
|-- templates/
|-- admin/
|-- myapp/
|-- change_form.html # do not misspell this
注意:此文件的位置并不重要。你可以把它 在你的应用程序内部,它仍然可以工作。只要它的位置可以 由django发现。更重要的是HTML的名称 文件必须与提供的原始HTML文件名相同 django的。
在 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.
答案 1 :(得分:1)
url: path('features/',views.get_features,name='features'),
views: def get_features(request):
id = request.GET.get('id','')
cat = Category.objects.get(pk=id)
result = list(Feature.objects.filter(category=cat).values('id', 'name'))
print(result)
return HttpResponse(json.dumps(result), content_type="application/json")
javascript: $(function(){
// inspect html to check id of category select dropdown.
$(document).on('change', "select#category_select_m1", function(){
$.getJSON("features/",{id: $(this).val()}, function(j){
var options = '<option value="" disabled selected>Choose your feature</option>';
console.log(j);
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#feature_select_m1").html(options);
});
});
});
已针对django 2.1更新,但无法正常运行,这要感谢 Satendra 。我不能在上面发表评论,这就是为什么我提交问题作为答案