1

我想在 django 中使用 jquery 显示相关的下拉值。我的第一个下拉列表包含 python、ruby 和 php 等语言。第二个下拉列表包含与语言相关的框架。对于 python,框架是 django、pylons、grok。对于ruby,框架是rails,cub。对于 php,框架是 cakephp、codeignator... 我写了 3 个表名语言、框架和网站。

模型.py

class languages(models.Model):
    lname=models.CharField(max_length=10)
    def __unicode__(self):
        return self.lname

class framework(models.Model):
    fname=models.CharField(max_length=25)
    lang=models.ForeignKey(languages)
    def __unicode__(self):
        return self.fname

class website(models.Model):
    wname=models.CharField(max_length=30)
    framewrk=models.ForeignKey(framework)
    def __unicode__(self):
        return self.wname

视图.py

def lang_fun(request):
    if request.method=='POST':
        l=request.POST.get('l1')
        languages(lname=l).save()
        return HttpResponseRedirect('/frame_fun')
    else:
        return render(request,"languages.html")
def frame_fun(request):
    if request.method=='POST':
        la=request.POST.get('drop1')
        f=request.POST.get('f1')
        framework(lang_id=la,fname=f).save()
        return HttpResponseRedirect('/web_fun')
    else:
        stl=languages.objects.all()
        return render(request,"framework.html",{'stl':stl})
def web_fun(request):
    if request.method=='POST':
        fr=request.POST.get('drop2')
        w=request.POST.get('w1')
        website(framewrk_id=fr,wname=w).save()
        return HttpResponseRedirect('/display')
    else:
        stl=framework.objects.all()
        return render(request,"website.html",{'stl':stl})
def display(request):
    s1=languages.objects.all()
    s=website.objects.all()
    return render(request,"display.html",{'s':s,'s1':s1})

显示.html

<html>
<head>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
    $('#drop1').on('change', function() { 
             $('#text1').val($('#drop1').val());

             });
    });
</script>
</head>
<body>
<table id="tab1" border="1px">
<tr><th>language</th><th>framework</th><th>website</th></tr>
{% for i in s %}
 <tr><td> {{i.framewrk.lang.lname}}</td>
  <td>{{i.framewrk.fname}}</td>
  <td>{{i.wname}}</td>
  </tr>
  {% endfor %}
</table>
<select id="drop1">
{% for i in s %}
<option value={{i.framewrk.fname}}>{{i.framewrk.lang.lname}}</option>
{% endfor %}
<input type="text" id="text1">
</body>
</html>

在我的 views.py 中,我添加了语言框架和网站。在我的 display.html 中,我显示了语言的相应框架和网站。正在访问下拉列表中的语言,重复的语言取决于它包含的框架数量。我想要它没有重复。我可以在文本框中一一显示语言的框架。我希望它在dropdon。当我选择 python 时,我希望 python 的框架显示在另一个下拉列表中。你能帮我写html和jquery吗?提前致谢。正在学习python。所以请指导我。

4

1 回答 1

1

它的任务相对容易,但我想说的是,您尝试使用自己的工具做太多事情,而不是使用 django 提供的最佳方法。将所有这些作为示例写出来需要太多时间,所以我将概述我为实现相同目标而要做的事情。

1) 使用 django 表单来显示表单和保存/处理模型数据。您可以为不同的选择框创建具有不同字段的单个表单。您将需要条件字段,因为一个字段中的选择取决于另一个字段中的选择。请参阅这篇关于使用条件形式的帖子:(链接)。在您的情况下,您将需要执行类似访问表单init方法中的表单绑定数据并从中读取选定的语言/框架值,然后根据这些值设置框架/网站选择的操作。

2) 字段更改事件是进行更改时刷新表单内容的好方法。但是不要发布表格。您可以在同一地址上执行表单 GET。

3)在视图中,您可以将 request.POST 或 request.GET 作为初始参数传递给表单类。在这两种情况下,这将成为表单的绑定数据 - 您将在表单的init方法中使用的数据来确定可用的选项。

4)如果是request.GET,只需再次返回相同的表单。您可以返回刚刚呈现的表单元素,并在网页上使用该呈现的 html 来交换现有表单。不要忘记使用 jquery.live 方法将 'change' 事件绑定到表单字段,否则在换出表单后事件将不起作用。

5) 仅在您实际发布表单时使用 POST。

这会给你带来什么:

1)您将只使用一个视图而不是 4。所有这些都可以在一个相对简单的视图中完成。

2)与字段值/选择相关的所有逻辑都将在表单类中,这是 imo 的最佳位置。

3)您将学习使用 OOP,如果您打算坚持使用 Django,这将使您受益匪浅。

4)作为旁注,你应该看看这个:链接

艾伦

于 2013-11-12T10:25:27.320 回答