我在网页上有几个过滤器选项(少于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文件中添加任何代码来获取选项
答案 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:它当然可以变得更加复杂,但这是起点。