繁体   English   中英

从另一个下拉菜单中选择一个选项时,动态加载一个下拉菜单

[英]Dynamically load a drop down on selecting an option from another drop down

我正在通过Django 1.4.5框架开发Web应用程序。 我想根据另一个下拉列表(选择id =“ ida”)中选择的选项动态地填充下拉列表(选择id =“ packages”)中的选项。 我一直在寻找答案,但是没有一个方向正确。 这是我的代码:

我的模板(html):

function getPackages(elementId)
{
//This is what I want to write, but could not figure out.
}

Select IDA's: 
<select id="ida" name="ida" onchange="getPackages('ida');">
{% for ida in ida_list %}
<option value="ida{{ ida.id }}">{{ ida.ida_display_name }}</option>
{% endfor %}
</select>

Select packages to install: <select id="package" name="package"multiple="multiple" size="5">
{% for package in package_list %}
<option value="package {{ package.pkg_id }}">{{ package.display_name }}</option>
{% endfor %}
</select>

我的观点:

def automation(request):
    ida_list = IDA.objects.all()
    ida = IDA.objects.get(ida_name='VSA')   #this is what I want to do from javascript
    package_list = ida.package_set.all()
    context = {'ida_list' : ida_list, 'package_list' : package_list}
    return render_to_response('vsawebauto/automation.html', context, context_instance=RequestContext(request))

我的模特:

class IDA(models.Model):
    ida_name = models.CharField(max_length=100)
    ida_display_name = models.CharField(max_length=100)

    def __unicode__(self):
        return self.ida_name    

class Package(models.Model):
    pkg_ID = models.IntegerField(primary_key=True)
    pkg_name = models.CharField(max_length=50)
    display_name = models.CharField(max_length=100)
    username = models.CharField(max_length=50,default="NULL")
    password = models.CharField(max_length=50,default="NULL")    
    IDAs = models.ManyToManyField(IDA)

    def __unicode__(self):
        return self.display_name

简要说明:根据HTML页面上IDA的选择,我希望软件包动态显示在下拉列表中。 包可以属于多个IDA,反之亦然(模型类中的许多关系)。 因此,我希望用户选择IDA后,JavaScript应立即获取与该IDA相对应的对象(类似:ida = IDA.objects.get(ida_name ='VSA')),并为此获取软件包并显示。

好吧,我做了一段时间。

在某些urls.py中

#...
url(r'^package_ajax/$', PackageForIdaView.as_view(), name="ida_change_all"),
url(r'^package_ajax/(?P<pk>[-_\w]+)/$', PackageForIdaView.as_view()),
#...

在某些views.py

class PackageForIdaView(ListView):
    template_name = "partial/package_options.html"
    model = Package
    context_object_name = "package_list"

    def get_queryset(self):
        query_set = super(PackageForIdaView, self).get_queryset()
        if 'pk' in self.kwargs:
            query_set = query_set.filter(IDAs=self.kwargs['pk'])
        return query_set

在一些JavaScript中:

$('#ida').change(function(event){
    var url = "{% url "ida_change_all" %}";
    var ida_id = this.value;
    if ida_id != undefined:
        url += ida_id
    $('#package').load(url);
})

在“ package_options.html”模板中:

{% for package in package_list %}
    <option value="package {{ package.pkg_id }}">{{ package.display_name }}</option>
{% endfor %}

也许有些事情失败了,我不记得所有的细节了,但是那样的话。

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM