我正在寻找一种简单的方法来为我的对象实现过滤器。一个基本的。我能找到的只是Django + Haystack + Solr或Elasticsearch。我没有使用Java应用程序的经验。另外......我想保持简单。
我能得到的最接近的是django_filter,但是它的文档是......不是像我这样的菜鸟。再加上我不能用普通的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)
答案 0 :(得分:1)
我为您提供了一个最低限度的示例,以便在您遇到错误时阅读一些文档。
首先,将您的状态选择放入设置文件中,以防万一,您可以在其他地方使用。
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 }}
...