Django 1.10超级简易过滤器

Django 1.10超级简易过滤器,django,python-3.x,django-models,Django,Python 3.x,Django Models,我正在寻找一种简单的方法来为我的对象实现过滤器。基本的。我只能找到Django+Haystack+Solr或Elasticsearch。我没有使用Java应用程序的经验。加我想保持简单 我能得到的最接近的是,但它的文档是。。。好吧,对我这样的笨蛋来说可不是。加上我不能用普通的Django做同样的事吗??我能够让简单的搜索在没有solr的情况下工作:并且我能够让过滤器在admin中工作,所以所有的工具都在那里 如果有人能一步一步地指导我如何为我的模型设置过滤器和状态。 模型 我对搜索工作的看法:

我正在寻找一种简单的方法来为我的对象实现过滤器。基本的。我只能找到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 }}
...