javascript - 如何根据django admin中的另一个选择字段限制选择字段选项

标签 javascript python django django-admin

我有以下模型:

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 方式”可以做到这一点,或者自定义 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="">--------&nbsp;</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>

您需要在提供有效项目的 JSON 列表的/items/URL 上调用一个 View 。

您可以使用 model admin media definitions 将其连接到您的管理员中.

关于javascript - 如何根据django admin中的另一个选择字段限制选择字段选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/796466/

相关文章:

django 为在外键字段模型中创建的新实例自动创建中间模型实例

python - 覆盖管理器时如何访问 Django 模型?

python - Django Rest Framework 分页提供小于页面大小

javascript - 提交后在 div 中显示复选框值

javascript - 最快的 JavaScript 求和

javascript - 如何判断每个用户访问每个页面的时间?

python - 获取所选值的索引

python - 对二维数组进行排序时出现问题

javascript - 如何从angularjs http回调中查看json数据?

python - 在 matplotlib 中绘制多个 y 轴和颜色条