在Django中抓取过滤器选项

时间:2015-05-20 17:26:00

标签: python django

我在网页上有几个过滤器选项(少于50美元,每页的结果数量等),我正在尝试找出获取和存储这些过滤器选项结果的最佳方法。

我找到了一些使用类似

的例子
num_results = request.POST.get('num_results_dropdown')

从下拉表中获取值(或者实际上我需要的信息),但我不完全确定在何处放置此代码,或者我是否需要在项目中添加/更改任何其他文件。

我认为我不需要为过滤器选项创建表单或模型,因为我只计划存储选项,直到我成功排序结果,所以我在抓取信息时发现的很多教程似乎都是我需要的东西太少了。

非常感谢任何帮助

修改

以下是结果数量下拉菜单的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>

我还没有在我的python文件中添加任何代码来获取选项

2 个答案:

答案 0 :(得分:0)

file:views.py - 通常在表单呈现视图中处理

def your_view(request):

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

答案 1 :(得分:0)

第一点:如果它只是过滤/排序内容,您应该使用GET请求(&#39;方法=&#39; GET&#39;在您的<form>标记中)。< / p>

第二点:您显然可以在模板中手动编写过滤器表单,并在视图中根据需要使用尽可能多的request.GET.get("fieldname", default),但实际上django表单的用途是:处理表单,无论你是什么使用表单的数据。

假设您要做的是过滤查询集,首先使用适当的字段编写表单,即:

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:它当然可以变得更加复杂,但这是起点。