назначение переключателей в качестве фильтра поиска - PullRequest
0 голосов
/ 09 марта 2009

Шаблон:

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

Я знаю, что весь мой код работает без ошибок, кроме строки (если andor1 == 1 :) и (если andor1 == 2 :) игнорируется. Я подозреваю, что значение для andor1 не появляется в точке, где я использую это. Я думаю, что на самом деле это не делает до возврата render_to_response, потому что он появляется в следующий шаблон в качестве значения, иначе я бы увидел какой-то ответ в if andor1 == 1: в шаблоне. Какие-либо предложения?

Ответы [ 3 ]

1 голос
/ 09 марта 2009

Значение andor1 является строкой при передаче из формы HTML, а "1" == 1 является ложным в Python. Попробуйте следующее:

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

Теперь это целое число, и ваши проверки ниже (if andor1 == 1) должны быть успешными.

Альтернативный тест для строк:

if andor1 == "1":
    ...
0 голосов
/ 09 марта 2009

спасибо! Цитаты сработали. Я думал о том, что значение является числовым и не нуждается в кавычках, поэтому я не пробовал это.

0 голосов
/ 09 марта 2009

Код dpaste: http://dpaste.com/10899/

...