我有以下型号:
class Category(models.Model):
name = models.CharField(max_length=40)
class Item(models.Model):
name = models.CharField(max_length=40)
category = models.ForeignKey(Category)
class Demo(models.Model):
name = models.CharField(max_length=40)
category = models.ForeignKey(Category)
item = models.ForeignKey(Item)
在创建新演示的管理界面中,用户从下拉列表中选择类别后,我想限制“项目”下拉菜单中的选项数量.如果用户选择其他类别,则项目选择应相应更新.我想在客户端上限制项目选择,甚至在服务器上进行表单验证之前.这是为了可用性,因为项目列表可能是1000可以缩小类别将有助于使其更易于管理.
有没有一个“django-way”这样做,或者是定制JavaScript这里唯一的选择?
解决方法
这是一些JavaScript(基于JQuery)更改项目选项值时类别更改:
<script charset="utf-8" type="text/javascript">
$(function(){
$("select#id_category").change(function(){
$.getJSON("/items/",{id: $(this).val(),view: 'json'},function(j) {
var options = '<option value="">-------- </option>';
for (var i = 0; i < j.length; i++) {
options += '<option value="' + j[i].optionValue + '">' + j[i].optiondisplay + '</option>';
}
$("#id_item").html(options);
$("#id_item option:first").attr('selected','selected');
})
$("#id_category").attr('selected','selected');
})
})
</script>
您需要在/ items / URL上调用视图来提供有效项目的JSON列表.
您可以使用model admin media definitions将其挂接到管理员中.