使用Django / Python从下拉列表中传递多个变量

时间:2013-08-23 09:04:50

标签: python django

我正在学习Python。我希望根据下拉列表中的多个选项显示结果。

以下代码正在运行,并为一个下拉列表返回正确的结果。我想添加至少一个下拉列表,希望多个,但我无法理解如何实现传递和返回多个变量。

表格代码

        <p> <form method="get" action="">

            <select name="search3">
                {% for cs in course_list %}
                    <option value="{{ cs.pk }}">{{ cs.name }}</option>
                {% endfor %}
            </select>
            <br/><br/>

            <input type=submit value="Find staff" />
            </form>
    </p>



    {% if employee_list %}
        {{ employee_list.count }} employees matching : <strong>{{ course }}</strong><br/><br/>
        {% for e in employee_list %}
        {% if not e.img1 %}
            <img src="/media/images/null_image.png" width="35"  title="{{ e.first_name}} {{e.surname }}" />
        {% else %}
            <img src="{{ e.img1.url }}" width="50" title="{{ e.first_name}} {{e.surname }}"/>
        {% endif %}
        <a href="/employee/{{ e.slug }}" target="_blank" rel="popup" title="Details...<br />
            {% for det in employee_list.employeedynamic_set.all %}
            {{ det.mobile }}<br />
            {{ det.depot }}<br />
            {% endfor %}
        ">&nbsp;{{ e.first_name }}&nbsp;{{ e.surname }}</a><br/>
        {% endfor %}
    {% else %}
        <p>No employees matched: <strong>{{ course }}</strong></p>
    {% endif %}

views.py代码

#   function to list training courses and participating uindividuals.
def CourseView(request):

    course_list     = Course.objects.all().order_by('name')
    if 'search3' in request.GET:
        search3     = request.GET['search3']
        course      = Course.objects.get(pk=search3)
    else:
        search3 = None
        course = None

    return render_to_response("course_display.html", {'course':course,  'course_list': course_list, 'search3': search3 })

是否可以添加另一个下拉选项甚至多个下拉选项并获得结果。还是我在错误的树上吠叫?

更新

为了将一个或多个变量传递回我的函数,代码只是以下

def CompetencyCheck(request):
    course_list = Course.objects.all()
    if 'search3' in request.GET:
        search3 = request.GET.getlist('search3')
        course = Course.objects.filter(id__in=search3).distinct().order_by()

.get()只允许从网页表单传递的最后一个变量被读/传回给函数。 另一方面, .getlist()允许传回一个或多个变量。很好,部分问题解决了。

返回的名称列表是唯一的,因为如果var1返回4个名称,var2返回8个名称,并且两个vars都有一个公共名称,则返回11个名称的列表。

我只想要返回的两个常用名称,返回1个名称。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您视图中的

request.GETdictionary;通过执行request.GET['search3'],您只需访问其search3密钥的值。因此,在您的模板中,您应该只需添加具有自己名称的其他<select>元素,并以相同的方式从request.GET检索其提交的值。

答案 1 :(得分:0)

您只能使用course_list进行查询。 例如:

course_list     = Course.objects.all().order_by('name')
var1 = request.POST.get('var1')
if var1:
    course_list = course_list.objects.filter(some = var1)
var2 = request.POST.get('var2')
if var2:
    course_list = course_list.objects.filter(some = var2)