Django 1.10超级简易过滤器
我正在寻找一种简单的方法来为我的对象实现过滤器。基本的。我只能找到Django+Haystack+Solr或Elasticsearch。我没有使用Java应用程序的经验。加我想保持简单 我能得到的最接近的是,但它的文档是。。。好吧,对我这样的笨蛋来说可不是。加上我不能用普通的Django做同样的事吗??我能够让简单的搜索在没有solr的情况下工作:并且我能够让过滤器在admin中工作,所以所有的工具都在那里 如果有人能一步一步地指导我如何为我的模型设置过滤器和状态。 模型 我对搜索工作的看法:Django 1.10超级简易过滤器,django,python-3.x,django-models,Django,Python 3.x,Django Models,我正在寻找一种简单的方法来为我的对象实现过滤器。基本的。我只能找到Django+Haystack+Solr或Elasticsearch。我没有使用Java应用程序的经验。加我想保持简单 我能得到的最接近的是,但它的文档是。。。好吧,对我这样的笨蛋来说可不是。加上我不能用普通的Django做同样的事吗??我能够让简单的搜索在没有solr的情况下工作:并且我能够让过滤器在admin中工作,所以所有的工具都在那里 如果有人能一步一步地指导我如何为我的模型设置过滤器和状态。 模型 我对搜索工作的看法:
def index(request):
#full list
queryset_list = Contact.objects.all()
#search
query = request.GET.get("q")
if query:
queryset_list = queryset_list.filter(
Q(name__icontains=query)|
Q(phone__icontains=query)|
Q(url__icontains=query)|
Q(email__icontains=query)|
#pagination
paginator = Paginator(queryset_list, 10)
page_request_var = "page"
page = request.GET.get(page_request_var)
try:
queryset = paginator.page(page)
except PageNotAnInteger:
queryset = paginator.page(1)
except EmptyPage:
queryset = paginator.page(paginator.num_pages)
context = {
"object_list": queryset,
"name" : "List",
"page_request_var": page_request_var,
}
return render(request, "index.html", context)
我给你们举一个最低限度的例子,这样你们就可以阅读一些文档,以防出现一些错误 首先,将您的状态选择放入设置文件中,以便以防万一,您可以在其他任何地方使用
STATUS_CHOICES = (
('A','Active'),
('U','Unactive')
)
然后您需要创建一个过滤器集,现在将其放入models.py中:
那么在你看来,
def index(request):
queryset_list = Contact.objects.all()
query = request.GET.get('q', '')
if query:
queryset_list = queryset_list.filter(
Q(name__icontains=query) | Q(phone__icontains=query) |
Q(url__icontains=query) | Q(email__icontains=query)
)
filtered = SearchFilter(request.GET, queryset=queryset_list)
context = {
'filtered': filtered,
}
return render(request, 'index.html', context)
最后在模板中输入以下内容:
...
{{ filtered.form.status }}
...
因此,您已经在通过GET参数筛选查询了。您想根据什么筛选此项?我想为状态添加筛选选项。因此,潜在用户可以获得所有活动、非活动或所有联系人。听起来很简单。。。我只需要一个正确的方向,因为我所能做的就是在谷歌上包含这个复杂的java解决方案。您可以手动执行,或者在HTML中创建另一个名为status的表单字段。在表单提交中,您将在request.GET中获得它。使用另一个Q对象过滤查询,并将其传递回上下文以设置表单字段值。第二种方法实际上是使用Django过滤器,这一点都不难。我可以给你看,漂亮吗?如果您能给我演示一下,那就太好了。起初发生了这样的情况:AssertionError:设置“Meta.model”,而不包含“Meta.fields”或“Meta.exclude”,从0.15.0开始就被弃用,现在被禁止使用。向SearchFilter类添加显式的“Meta.fields”或“Meta.exclude”。但我设法获得了信息并添加了字段=['status']。这样就不会再有错误了。尽管缺少模板,但仍然没有完全发挥作用。我想我已经在搜索框旁边的下拉列表中找到了我想要的值。我的搜索有效。但当我从“过滤器”下拉列表中选择一个值并单击“过滤器”时。。。什么也没发生form action=method=get>{{filtered.form.status}}Filter确定,因此您已经发现需要向要进行筛选的元类添加字段:中没有发生任何情况,页面不刷新?是的。没有行动。不筛选项目。
def index(request):
queryset_list = Contact.objects.all()
query = request.GET.get('q', '')
if query:
queryset_list = queryset_list.filter(
Q(name__icontains=query) | Q(phone__icontains=query) |
Q(url__icontains=query) | Q(email__icontains=query)
)
filtered = SearchFilter(request.GET, queryset=queryset_list)
context = {
'filtered': filtered,
}
return render(request, 'index.html', context)
...
{{ filtered.form.status }}
...