2013-08-23 46 views
1

我正在學習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 }) 

是否有可能增加一個下拉的另一個選項,或甚至多個下拉選項,並得到一個結果。還是我吠叫錯了樹?

UPDATE。

爲了通過一個或多個變量回到我的函數的代碼僅僅是以下

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() 

獲得()僅允許從網頁表單傳遞的最後一個變量被讀/傳回給函數。 另一方面,.getlist()允許一個或多個變量傳回。很好,部分解決了問題。

返回的名稱列表是唯一的,因爲如果var1返回4個名稱並且var2返回8個名稱並且這兩個vars都有一個公用名稱,則返回11個名稱的列表。

我只想要返回兩個變量的通用名稱,要返回的1個名稱。

任何想法?

+0

我不完全清楚你的問題是什麼。究竟你在哪裏遇到問題? –

+0

嗨丹尼爾。我希望能夠通過兩個變量(從兩個下拉列表中)從窗體和顯示結果 –

回答

1

request.GET在你看來是dictionary;通過做request.GET['search3']您只需訪問其search3密鑰的值。因此,在您的模板中,您應該只需添加其他<select>元素以及它們自己的名稱,並以相同的方式從request.GET中檢索其提交的值。

+0

您好GChorn,我一直在閱讀QueryDict。 Pradeep提出了一個可能的解決方案。經過調查,我發現您可以將多個選擇分配給HTML中的var。 –

+0

@TommyGibbons,你指的是帶有'multiple'屬性的''可以從中選擇多個值。 – GChorn

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) 
+0

我跟着你的想法找到以下