如何使用 Modelform 和 jquery 在 django 中获取相互依赖的下拉菜单?

2024-03-21

我是 django 和 jquery 的新手。我正在开发一个基于 django 的应用程序,其中表单中有 3 个下拉列表。 1. 校园 2. 学校 3. 中心

层次结构是校园有学校,学校有中心。我想将这些下拉菜单相互链接。

例如,我有 3 个校区,即 Campus1、Campus2、Campus3。如果我选择 Campus1,我应该只能选择在 Campus1 中的学校并继续此操作,如果我选择 School1,那么我需要能够选择 School1 的中心,并且所有其他选项都应该隐藏。

我在网上搜索并尝试过这个http://blog.devinterface.com/2011/02/how-to-implement-two-dropdowns-dependent-on-each-other-using-django-and-jquery/ http://www.javascriptkit.com/script/script2/triplecombo.shtml但这似乎对我不起作用。 我也检查过这个http://www.javascriptkit.com/script/script2/triplecombo.shtml http://www.javascriptkit.com/script/script2/triplecombo.shtml但由于我使用 ModelForm 创建表单,这不符合我的需求。

请指导我这样做。

Thanks


您可能需要使用以下技术:

  • 自定义 Django 表单字段(在模型表单内)
  • ajax(获取记录)
  • simplejson(将 json 响应发送到 ajax)
  • jquery(更新客户端的组合框)

让我们看一个例子(没有真正测试过,只是我的想法):

模型.py

from django.db import models

class Campus(models.Model):
    name = models.CharField(max_length=100, choices=choices.CAMPUSES)

    def __unicode__(self):
        return u'%s' % self.name

class School(models.Model):
    name = models.CharField(max_length=100)
    campus = models.ForeignKey(Campus)

    def __unicode__(self):
        return u'%s' % self.name

class Centre(models.Model):
    name = models.CharField(max_length=100)
    school = models.ForeignKey(School)

    def __unicode__(self):
        return u'%s' % self.name

Forms.py

import models
from django import forms

class CenterForm(forms.ModelForm):
    campus = forms.ModelChoiceField(queryset=models.Campus.objects.all())
    school = forms.ModelChoiceField(queryset=models.School.objects.none()) # Need to populate this using jquery
    centre = forms.ModelChoiceField(queryset=models.Centre.objects.none()) # Need to populate this using jquery

    class Meta:
        model = models.Center

        fields = ('campus', 'school', 'centre')

现在,在视图中编写一个方法,返回校园下的学校和学校下的中心的 json 对象:

Views.py

import models
import simplejson
from django.http import HttpResponse

def get_schools(request, campus_id):
    campus = models.Campus.objects.get(pk=campus_id)
    schools = models.School.objects.filter(campus=campus)
    school_dict = {}
    for school in schools:
        school_dict[school.id] = school.name
    return HttpResponse(simplejson.dumps(school_dict), mimetype="application/json")

def get_centres(request, school_id):
    school = models.School.objects.get(pk=school_id)
    centres = models.Centre.objects.filter(school=school)
    centre_dict = {}
    for centre in centres:
        centre_dict[centre.id] = centre.name
    return HttpResponse(simplejson.dumps(centre_dict), mimetype="application/json")

现在编写一个 ajax/jquery 方法来获取数据并填充selectHTML 中的元素。

AJAX/jQuery

$(document).ready(function(){
    $('select[name=campus]').change(function(){
        campus_id = $(this).val();
        request_url = '/get_schools/' + campus_id + '/';
        $.ajax({
            url: request_url,
            success: function(data){
                $.each(data, function(index, text){
                    $('select[name=school]').append(
                         $('<option></option>').val(index).html(text)
                     );
                });
            }
        });
        return false;
    })
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Modelform 和 jquery 在 django 中获取相互依赖的下拉菜单? 的相关文章

随机推荐

  • 实体框架 CTP5 代码优先:将一个类与另一个类的多个集合映射

    使用 EF CTP5 Code First 我尝试映射一个类模型 该模型在一个类中包含指向另一个类的多个集合 这是我的意思的一个例子 public class Company public int CompanyId get set pub
  • php中的empty()、isset()和is_null()函数有什么区别?

    我做了很多研究 但无法找到这三者之间的区别 所以我做了一个简短的例子 希望对我们有所帮助 这是所有这三个的表格表示 Case Empty isset is null 1 a NULL 1 0 1 2 Not exists 1 0 1 War
  • 如何启用 :tsearch 字典进行 pg_search 多重搜索?

    我正在将 pg search 添加到 Rails 应用程序中 我正在按照 github 上的说明进行操作铁路广播公司 http railscasts com episodes 343 full text search in postgres
  • Web Components(原生UI)之间如何通信?

    我正在尝试为我的一个 UI 项目使用本机 Web 组件 对于这个项目 我没有使用任何框架或库 例如 Polymer 等 我想知道是否有最好的方法或其他方式在两个项目之间进行通信像我们在 AngularJS Angular 中所做的那样的 W
  • Flexslider - 动画:“幻灯片”,animationLoop:“true” - 冲突

    我有一个问题弹性滑块2 http www woothemes com flexslider在某些特定情况下 我将它用作内容滑块 我需要的是让动画幻灯片而不是淡入淡出 并循环播放幻灯片 我有 3 张幻灯片 其中包含 div 内容和更多列表 以
  • 致命错误:调用成员函数 getKeyName()

    我是 joomla 的新手 我创建了一个 joomla 组件 当我单击管理中的新按钮时 我收到这样的错误 致命错误 在 C xampp htdocs Joomla1 libraries joomla application componen
  • 现代 Unix/Linux 系统上的密码是否仍限制为 8 个字符?

    多年前 Unix 密码的长度限制为 8 个字符 或者如果密码长度超过 8 个字符 那么多余的字符也不会产生任何影响 大多数现代 Unix Linux 系统上仍然是这种情况吗 如果是这样 大约什么时候在大多数系统上可以使用更长的密码 有没有一
  • 将双精度数字舍入为以位数给定的较低精度的有效方法

    在 C 中 我想将双精度舍入到较低的精度 以便可以将它们存储在关联数组中不同大小的存储桶中 与通常的舍入不同 我想舍入到多个有效位 因此 大数字的绝对变化将比小数字变化大得多 但它们往往会按比例变化 因此 如果我想四舍五入到 10 个二进制
  • 为什么这个具有推导返回类型的内联方法尚未定义?

    include
  • RadGrid 底部的水平滚动空白

    我正在使用 RadGrid 从数据库检索数据 我的 RadGrid 中有更多列 因此我需要显示 RadGrid 水平滚动以防止页面扩展 但禁用垂直滚动 因此网格的高度应扩展以始终显示网格中的所有行 我得到了结果 但 RadGrid 底部有空
  • 使用 Chosen 链接选择

    我正在尝试将选择与Chosen https github com harvesthq chosen and Chained http www appelsiini net projects chained但我不确定我是否正确实现了 chos
  • 文件观察器创建事件

    我正在使用 net 文件监视程序监视文件夹中的某些类型的文件 mbxml 我正在使用 filewatcher 创建的事件 一旦创建的事件触发 我必须将此文件移动到另一个文件夹 这种方法的问题在于 一旦文件复制开始 就会触发创建的事件 因此
  • 存储用户时区的最佳实践 - TSQL/.Net

    我需要跟踪用户的时区 以便在他们指定的特定时间 在他们自己的时区 处理他们的信息 或不处理 显而易见的答案是将时区及其个人资料信息存储在用户数据库中 有点棘手的是夏令时 从下图中请注意 大多数北部和南部地区使用夏令时偏移 因此 存储时区偏移
  • 防止 PHP 脚本在运行时耗尽所有资源?

    我有一个每日 cron 作业 运行大约需要 5 分钟 它会收集一些数据 然后更新各种数据库 它工作正常 但问题是 在这 5 分钟内 该站点完全没有响应任何请求 无论是 HTTP 还是其他请求 看起来 cron 作业脚本在运行时会占用所有资源
  • 使用基数排序实现 std::sort 重载是否合法?

    对于适用的数据类型 良好的基数排序可以大幅击败比较排序 但是std sort通常作为 introsort 实现 有没有理由不使用基数排序来实现std sort 基数排序不足以实现std sort因为std sort仅要求类型具有可比性 但对
  • Flutter:固定高度容器内的可滚动列子项

    我有一些容器里面一个ListView这将导致可滚动内容在一个页面内 每个容器都有一个 Column 作为子容器在列中 我有一个标题和一个分隔线 然后是实际内容 我希望其中一个容器是这样的 Title divider Scrollable c
  • Windows8:设备标识符

    我目前正在尝试检索唯一的设备标识符 这是我的代码 var token Windows System Profile HardwareIdentification getPackageSpecificToken null var reader
  • 如何在新页面上显示 AJAX 响应

    我正在phonegap中开发移动应用程序并使用intel xdk 我想在新的html页面上显示ajax响应我在google上搜索并找到了这个解决方案window open 但这种方法对我不起作用并显示空白 白屏 我想显示我的数据search
  • pyqt中GUI的模型视图实现错误

    当我关闭应用程序时 以下示例代码因此错误而崩溃 QBasicTimer start QBasicTimer can only be used with threads started with QThread 这是我的代码 import s
  • 如何使用 Modelform 和 jquery 在 django 中获取相互依赖的下拉菜单?

    我是 django 和 jquery 的新手 我正在开发一个基于 django 的应用程序 其中表单中有 3 个下拉列表 1 校园 2 学校 3 中心 层次结构是校园有学校 学校有中心 我想将这些下拉菜单相互链接 例如 我有 3 个校区 即