首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django 1.10超级简易过滤器

Django 1.10超级简易过滤器
EN

Stack Overflow用户
提问于 2017-03-20 22:40:17
回答 1查看 395关注 0票数 0

我正在寻找一种简单的方法来为我的对象实现一个过滤器。一个基本的。我只能找到Django+Haystack+Solr或者Elasticsearch。我没有使用Java应用程序的经验。再加上..。我想保持简单。

我能得到的最接近的是过滤器,但是它的文档是.不是为了像我这样的菜鸟。另外,我不能对普通的Django做同样的事吗?我能够在没有solr :)的情况下实现简单的搜索,并且我能够让过滤器在管理中工作,所以所有的工具都在那里。

如果有人能一步一步地指导我,那么如何从我的模型中设置过滤器和状态。模型

代码语言:javascript
运行
复制
    class Contact(models.Model):
    name = models.CharField(max_length=2000
    phone = models.CharField(max_length=10)
    url = models.URLField(max_length=200, default="https://")
    email = models.EmailField(max_length=25, verbose_name="Email", default="adress@email.com")
    STATUS = (
('A','Active'),
('U','Unactive')
        )
    status = models.CharField(max_length=1, choices=TYPE, default="A")
        def _unicode_(self):
        return self.name
    def _str_(self):
        return self.name

我对搜索工作的看法:

代码语言:javascript
运行
复制
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)   
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-21 11:52:47

我给你一个最小的例子,让你读一些文档,以防你有一些错误。

首先,将您的状态选择放入设置文件中,以便以防万一,您可以在其他任何地方使用。

代码语言:javascript
运行
复制
STATUS_CHOICES = (
    ('A','Active'),
    ('U','Unactive')
)

然后,您需要创建一个过滤器集,现在将其放入models.py中:

代码语言:javascript
运行
复制
from django.conf import settings
import django_filters

class SearchFilter(django_filters.FilterSet):
    status = django_filters.ChoiceFilter(choices=settings.STATUS_CHOICES)

    class Meta:
        model = Contact

那么在你看来:

代码语言:javascript
运行
复制
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)

最后,在模板中添加以下内容:

代码语言:javascript
运行
复制
...
{{ filtered.form.status }}
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42915265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档