我正在寻找一种简单的方法来为我的对象实现一个过滤器。一个基本的。我只能找到Django+Haystack+Solr或者Elasticsearch。我没有使用Java应用程序的经验。再加上..。我想保持简单。
我能得到的最接近的是过滤器,但是它的文档是.不是为了像我这样的菜鸟。另外,我不能对普通的Django做同样的事吗?我能够在没有solr :)的情况下实现简单的搜索,并且我能够让过滤器在管理中工作,所以所有的工具都在那里。
如果有人能一步一步地指导我,那么如何从我的模型中设置过滤器和状态。模型
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
我对搜索工作的看法:
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)
发布于 2017-03-21 11:52:47
我给你一个最小的例子,让你读一些文档,以防你有一些错误。
首先,将您的状态选择放入设置文件中,以便以防万一,您可以在其他任何地方使用。
STATUS_CHOICES = (
('A','Active'),
('U','Unactive')
)
然后,您需要创建一个过滤器集,现在将其放入models.py
中:
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
那么在你看来:
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 }}
...
https://stackoverflow.com/questions/42915265
复制相似问题