Django 表单的搜索和过滤功能
Django 表单的搜索和过滤功能可以通过模型管理器和查询集实现。以下是示例代码:
- 在模型管理器中添加搜索和过滤
class MyModelManager(models.Manager): def search(self, query): return self.filter(Q(field1__icontains=query) | Q(field2__icontains=query)) def filter_by_query_param(self, query_param): if query_param: return self.search(query_param) return self.all() class MyModel(models.Model): field1 = models.CharField(max_length=100) field2 = models.CharField(max_length=100) ... objects = MyModelManager()
在上面的代码中,search
方法可以在多个字段中搜索指定字符串。filter_by_query_param
方法可以根据 URL 参数来过滤记录。
- 在视图中使用表单搜索和过滤
class MyModelListView(ListView): model = MyModel template_name = 'my_template.html' context_object_name = 'my_models' def get_queryset(self): queryset = super().get_queryset() query_param = self.request.GET.get('q') # 获取查询参数 return queryset.filter_by_query_param(query_param)
上面的代码中,在视图中的 get_queryset
方法中调用 MyModelManager
的 filter_by_query_param
方法来过滤记录。
- 在模板中使用表单搜索和过滤
<form method="get"> <input type="text" name="q" value="{{ request.GET.q }}"> <input type="submit" value="Search"> </form> {% for my_model in my_models %} <div>Field1: {{ my_model.field1 }}</div> <div>Field2: {{ my_model.field2 }}</div> ... {% endfor %}
在模板中,使用 request.GET.q
获取查询参数,并在搜索框中显示出来。在循环中可以显示查询后的记录。
示例中使用的字符串是 “pidancode.com”、“皮蛋编程”。这些都是无意义的字符串,在实际项目中应该使用真实的数据。
相关文章