Djangoadminselect⼆级联动效果
实现原理:
1. 继承admin/change_form.html新添加⼀段js监听对应id的select变化,将新得页⾯通过admin.py change_form_template =
'apt_data/record_change_form.html' 参数指定新得页⾯
2. 请求url进⾏查询,返回查询结果,json形式
3. js拿到结果,重新渲染select option
缺点:
⽬前不太灵活,如果可以通过admin.py指定⼀个select参数就好了
代码参考:
admin.py
@ister(AptReport)
class AptReportAdmin(ExportCsvMixin,admin.ModelAdmin):
actions = ["export_as_csv"]
change_form_template = 'apt_data/record_change_form.html'
list_per_page = 10
list_display = ["id", "report_name", ...]
apt_data/record_change_form.html
{% extends "admin/change_form.html" %}
{% load i18n admin_urls static admin_modify %}
{% block extrahead %}{{ block.super }}
<script type="text/javascript" src="{% url 'admin:jsi18n' %}"></script>
<script>
django.jQuery(function() {
var select = django.jQuery("#id_attack_method_class");
select.change(function(){
console.log("value change"+django.jQuery(this).val());
var url = "/apt_main/form_ttp/?fid="+django.jQuery(this).val();
(
url,
function(data){
var target = django.jQuery("#id_attack_method_ttp");
data.forEach(function(e){
target.append("<option value='"+e.id+"'>"+e.attack_method_ttp+"<option>");
target.eq(0).attr('selected', 'true');
});
});
})
});
</script>
{% endblock %}
url.py
app_name="apt_main"
urlpatterns = [django admin 自定义页面
path('form_ttp/', views.SelectView.as_view()),
]
view.py
class SelectView(LoginRequiredMixin, View):
'''
处理attack⼆级联动数据请求
'''
def get(self, request):
# 通过get得到⽗级选择项
attack_method_class = ('fid', '')
# 筛选出符合⽗级要求的所有⼦级,因为输出的是⼀个集合,需要将数据序列化 serializers.serialize()
result = AptAttackMethodTTP.objects.filter(attack_method_class=attack_method_class).values("id","attack_method_ttp")
data = [x for x in result]
return HttpResponse(json.dumps(data),content_type="application/json")

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。