Django 表单的搜索和过滤功能

2023-04-11 00:00:00 功能 过滤 表单

Django 表单的搜索和过滤功能可以通过模型管理器和查询集实现。以下是示例代码:

  1. 在模型管理器中添加搜索和过滤
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 参数来过滤记录。

  1. 在视图中使用表单搜索和过滤
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 方法中调用 MyModelManagerfilter_by_query_param 方法来过滤记录。

  1. 在模板中使用表单搜索和过滤
<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”、“皮蛋编程”。这些都是无意义的字符串,在实际项目中应该使用真实的数据。

相关文章