2013-06-18 191 views
0

我正在通過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')),並且應該爲該包提取包IDA並顯示。

+0

你遇到了什麼問題? getPackages – Nix

+0

的代碼在哪裏我找不到一種方法來做到這一點。對不起,我應該在之前提到過。我可以使用'ida.package_set.all()'獲取特定IDA的軟件包(例如VSA,如上圖所示),並在模板上顯示package_list。但我想在javascript中執行相同的操作(以顯示與列表中所選IDA對應的包)@Nix – gauravhalbe

回答

0

嗯,我花了一些時間。

在一些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 %} 

也許一些事情失敗了,我不記得所有的細節,但這就是方式。

希望這會有所幫助!

+0

告訴我它是否可用,請 – lalo

相關問題