2015-05-20 4 views
0

У меня есть несколько параметров фильтра на веб-странице (меньше 50 долларов США, количество результатов на страницу и т. Д.), И я пытаюсь найти лучший способ получить и сохранить эти параметры фильтра.Параметры фильтра захвата в Django

Я нашел несколько примеров, которые используют что-то вроде

num_results = request.POST.get('num_results_dropdown') 

, чтобы получить значение из выпадающего таблицы (или на самом деле все, что мне нужна информация от), но я не совсем уверен, куда поместить этот код или если мне нужно добавить/внести изменения в любые другие файлы в моем проекте.

Я не думаю, что мне нужно создать форму или модель для параметров фильтра, потому что я планирую сохранить параметры до тех пор, пока не удастся отсортировать мои результаты, поэтому многие обучающие материалы, которые я нашел при захвате информации, немного чрезмерное для того, что мне нужно.

Любая помощь очень ценится

EDIT

Вот HTML для числа результатов в раскрывающемся меню:

<select name="num_results"> 
    <option value="10">10</option> 
    <option value="20">20</option> 
    <option value="50">50</option> 
    <option value="100">100</option> 
    <option value="200">200</option> 
    <option value="300">300</option> 
</select> 

Я не добавил код в моем питона файлы еще не получили опции

ответ

0

файл: views.py - обычно обрабатывается в виде рендеринга формы

def your_view(request): 

    if request.method == 'POST': 
     num_results = request.POST.get('num_results') 
    #rest of the code . . . 
+0

Оба ответа помогли мне понять, но это помогло больше, поэтому я принимаю его. То, что помогло от другого ответа, заключалось в использовании тега '

', но в итоге я использовал метод post. Это, наверное, не самое элегантное решение, но оно работает. – steveclark

0

Первая точка: если это только фильтрация/сортировка вещей, вы должны использовать запрос GET («метод =» GET»в вашем <form> тега).

Второй пункт: вы можете, очевидно, написать свою форму фильтров вручную в шаблоне и использовать как можно больше request.GET.get("fieldname", default), но на самом деле это то, что формы django предназначены для: обработки форм, независимо от того, что вы делаете с данными формы.

Предполагая, что вы хотите сделать, это фильтровать QuerySet, первым написать форму с соответствующими полями, а именно:

class FiltersForm(forms.Form): 
    PRICE_CHOICES = (
     (50, "Less than $50"), 
     (100, "Less than $100"), 
     (500, "Less than $500") 
     ) 
    price = forms.ChoiceField(
     label="price", 
     choices = PRICE_CHOICES, 
     required=False 
     ) 

    # etc 

    def filter(self, queryset): 
     if "price" in self.cleaned_data: 
      price = self.cleaned_data["price"] 
      queryset = queryset.filter(price__gte=price) 
     # etc 
     return queryset 

Затем на ваш взгляд:

def myview(request): 
    objects = MyModel.objects.all() 
    form = FiltersForm(request.GET) 
    if form.is_valid(): 
     objects = form.filter(objects) 

    context = { 
     "form": form, 
     "objects": objects, 
     } 
    return render(request, "mytemplate.html", context) 

Затем в шаблоне вы просто нужно отобразить форму и объекты ...

NB1: wrt/объекты на странице, Django имеет класс Paginator ... NB2: он может из c наши становятся намного сложнее, но это отправная точка.

Смежные вопросы