django - 使用 django 过滤器搜索所有内容
问题描述
我正在尝试搜索多个字段和全文警告表。我使用 django 过滤器进行搜索,但没有返回结果。我还使用 django 过滤器引用了一些代码并遵循它们,但没有。我该如何解决?这是一些代码。
过滤器.py
import django_filters
from .models import Warnings
class WarningFilter(django_filters.FilterSet):
title = django_filters.CharFilter(lookup_expr='icontains')
detail = django_filters.CharFilter(lookup_expr='icontains')
type = django_filters.CharFilter(lookup_expr='icontains')
website = django_filters.CharFilter(lookup_expr='icontains')
class Meta:
model = Warnings
fields = ['title', 'detail', 'type', 'website']
视图.py
def search(request):
if request.method == 'GET':
query = request.GET.get('q')
result = WarningFilter(query, queryset=Warnings.objects.all())
context = {'filters': result.qs}
return render(request, 'pages/history_warning.html', context)
模型.py
from django.db import models
from django.contrib.auth.models import User
import uuid
class Website(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=200)
uri = models.CharField(max_length=200)
def __str__(self):
return self.name
class Warnings(models.Model):
TYPE_WARNINGS = (
('security', "Cảnh báo bảo mật"),
('service', "Cảnh báo dịch vụ")
)
title = models.CharField(blank=True, null=True, max_length=255)
detail = models.TextField(blank=True, null=True)
date_created = models.DateTimeField(auto_now_add=True, blank=True, null=True)
type = models.CharField(choices=TYPE_WARNINGS, blank=True, null=True, max_length=255)
website = models.ForeignKey(Website, on_delete=models.CASCADE)
def __str__(self):
return self.title
解决方案
可能你可以这样做filter.method
:
class WarningFilter(django_filters.FilterSet):
q = django_filters.CharFilter(method='filter_q')
def filter_q(self, qs, name, value):
return qs.filter(
Q(title__icontains=value) | Q(detail__icontains=value) | Q(type__icontains=value) | Q(website__name__icontains=value)
)
用法:
if request.method == 'GET':
result = WarningFilter(request.GET, queryset=Warnings.objects.all())
context = {'filters': result.qs}
return render(request, 'pages/history_warning.html', context)
推荐阅读
- python-3.x - 有没有在其他函数中调用函数的命令?
- android - 使用改造在 Android 应用程序中缓存请求的网络响应 1 天
- mysql - char列上的mysql唯一索引未与IN子句一起使用
- php - 如何为每个批准的新用户注册创建新架构并进行迁移?
- sql - Hive case when 子句效率
- scala - 使用 Java.time 将日期时间转换为纪元时如何处理边缘情况
- docker - macOS 上的 ElasticSearch docker 镜像
- powershell - 通过 Powershell 将 SP 组添加到新创建的人员或组列
- mysql - MySQL 查询优化,通过其中两个表的并集触及三个表
- python - Python - 将任意 EXIF 数据添加到图像(UserComment 字段)?