6

Django How to Filter QuerySets Dynamically using django-filter

 3 years ago
source link: https://www.mindg.cn/?p=2851
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Django How to Filter QuerySets Dynamically using django-filter

This tutorial is about how to use the django-filter to add a filtering to your views

I will implement a view to search for users.

Installation
install it with pip:

pip install django-filter settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',
    'widget_tweaks',
    'django_filters',# pip install django-filter https://django-filter.readthedocs.org/en/latest/

filters.py

#filters.py
from django.contrib.auth.models import User
import django_filters
class UserFilter(django_filters.FilterSet):
    class Meta:
        model = User
        fields = ['username', 'first_name', 'last_name', ]

views.py

#views.py
from django.shortcuts import render, redirect
from django.contrib.auth.models import User
from myapp.filters import UserFilter
def search(request):
    user_list = User.objects.all()
    user_filter = UserFilter(request.GET, queryset=user_list)
    return render(request, 'user_list.html', {'filter': user_filter})

urls.py

#urls.py
from django.contrib import admin  
from django.urls import path
from myapp import views  
from django.conf.urls import url
urlpatterns = [  
    path('admin/', admin.site.urls),  
    url(r'^search/$', views.search, name='search'),

templates/base.html

//templates/base.html
<!DOCTYPE html>
<html lang="en">
<head>
    {% load static %}
    <link rel="stylesheet" type="text/css" href="{% static 'css/bootstrap.css' %}"/>
    <meta charset="UTF-8" name="viewport" content="width=device-width, initial-scale=1"/>
<title>{% block title %}Django How to Filter QuerySets Dynamically using django-filter{% endblock %}</title>
<link href="{% static 'css/bootstrap.min.css' %}" rel="stylesheet">
</head>
<body>
    <nav class="navbar navbar-default">
        <div class="container-fluid">
            <a class="navbar-brand">Cairocoders</a>
        </div>
    </nav>
<div class="container">
    <div class="col-md-12 well">
        <h3 class="text-primary">Django How to Filter QuerySets Dynamically using django-filter</h3>
        <hr style="border-top:1px dotted #ccc;"/>
        {% block content %}
        {% endblock %}
    </div>
    </div>
    <script src="{% static 'js/jquery-3.1.1.min.js' %}"></script>
    <script src="{% static 'js/bootstrap.min.js' %}"></script>
</body>
</html>

user_list.html

//templates/user_list.html
{% extends 'base.html' %}
{% load widget_tweaks %}
{% block content %}
  <form method="get">
    <div class="well">
      <h4 style="margin-top: 0">Filter</h4>
      <div class="row">
        <div class="form-group col-sm-4 col-md-3">
          {{ filter.form.username.label_tag }}
          {% render_field filter.form.username class="form-control" %}
        </div>
        <div class="form-group col-sm-4 col-md-3">
          {{ filter.form.first_name.label_tag }}
          {% render_field filter.form.first_name class="form-control" %}
        </div>
        <div class="form-group col-sm-4 col-md-3">
          {{ filter.form.last_name.label_tag }}
          {% render_field filter.form.last_name class="form-control" %}
        </div>
      </div>
      <button type="submit" class="btn btn-primary">
        <span class="glyphicon glyphicon-search"></span> Search
      </button>
    </div>
  </form>
  <table class="table table-bordered">
    <thead>
      <tr>
        <th>Username</th>
        <th>First name</th>
        <th>Last name</th>
        <th>Date joined</th>
      </tr>
    </thead>
    <tbody>
      {% for user in filter.qs %}
        <tr>
          <td>{{ user.username }}</td>
          <td>{{ user.first_name }}</td>
          <td>{{ user.last_name }}</td>
          <td>{{ user.date_joined }}</td>
        </tr>
      {% empty %}
        <tr>
          <td colspan="5">No data</td>
        </tr>
      {% endfor %}
    </tbody>
  </table>
{% endblock %}
本条目发布于2021-03-10。属于Django分类,被贴了 Django 标签。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK