单选按钮分配作为搜索过滤器

时间:2009-03-09 16:37:15

标签: django search variable-assignment

模板:

<form method="POST" action="/Bycategory/">
<input type="radio" name="andor1" value=1 checked>
<input type="radio" name="andor1" value=2>
<select id="pathology_id" name="pathology_id">
    {% for pathology in pathology_list %}
        <option value="{{ pathology.id }}">{{ pathology.pathology }}</option>
    {% endfor %}
</select>

实际上有三种搜索选择(病理,商品, 用户可以进行和/或混合或匹配三者, 这就是为什么我需要views.py中的和/或选项。

views.py:

def Bypub(request):
    andor1 = request.POST['andor1']
    pathology_id = request.POST['pathology_id']
    p = get_object_or_404(Pathology, pk=pathology_id)
    pub1=Publication.objects.exclude(pathpubcombo__pathology__id= 1).filter(pathpubcombo__pathology=p)
    list=[]
    andlist=[]
    for publication in pub1:
        if andor1 == 1:
            if publication not in list:
                list.append(publication)
        if andor1 == 2:
            if publication in list:
                andlist.append(publication)
                #list=andlist
    return render_to_response('search/categories.html', {
        'andor1' : andor1,
        'pub1': pub1,
        'pathology': p,
        'list' : list,
        'andlist' : andlist,
    },
        context_instance=RequestContext(request)
    )

我知道我的所有代码都可以正常运行,但是行(如果是oror1 == 1 :)和(如果andor1 == 2 :) 被忽略了。我怀疑andor1的值没有出现 在我正在使用它的地方。我认为它实际上并没有呈现 直到返回render_to_response之后,因为它出现在 下一个模板作为值,否则我会看到某种响应 在if andor1 == 1:在模板中。有什么建议?

3 个答案:

答案 0 :(得分:1)

andor1的值是从HTML表单传递时的字符串,而"1" == 1在Python中为False。请尝试以下方法:

try:
    andor1 = int(request.POST['andor1'])
except (KeyError, ValueError):
    andor1 = 0

现在它是一个整数,下面的检查(if andor1 == 1)应该会成功。

或者测试字符串:

if andor1 == "1":
    ...

答案 1 :(得分:0)

dpaste代码:http://dpaste.com/10899/

答案 2 :(得分:0)

谢谢你!报价有效。我的想法是坚持这样一个事实,即价值是一个数字,不应该引用,所以我没有尝试。