问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Django QuerySet对象的filter()方法详解

创作时间:
作者:
@小白创作中心

Django QuerySet对象的filter()方法详解

引用
CSDN
1.
https://m.blog.csdn.net/qq_26086231/article/details/140245782

本文将详细介绍Django框架中QuerySet对象的filter()方法的使用。filter()方法用于实现数据过滤功能,类似于SQL语句中的WHERE子句。通过具体的代码示例和步骤说明,帮助读者更好地理解和掌握这一知识点。

filter()方法的基本用法

filter()方法用于实现数据过滤功能,相当于SQL语句中的WHERE子句。

  • filter(字段名__exact=10)filter(字段名=10) 类似SQL中的 =10
  • filter(字段名__gt=10) 类似SQL中的 >10
  • filter(price__lt=29.99) 类似SQL中的 <29.99
  • filter(字段名__gte=10, 字段名__lte=20) 类似SQL中的 >=10 and <=10

使用filter()方法获取所有价格在10到20之间的书籍:

# books = Book.objects.filter(price__gte=10, price__lte=20)  # __gte是“greater than or equal to”(大于等于)的缩写,__lte是“less than or equal to”(小于等于)的缩写。
# books = Book.objects.filter(price__gt=10)   # 在Django的ORM(对象关系映射)查询中,__gt是过滤条件的一个特殊语法,用于表示“大于”(greater than)。
books = Book.objects.filter(price__lt=29.99)   # __lt 是“less than”(小于)的缩写。  

实战应用:创建一个Django应用

接下来,我们将通过一个完整的Django应用示例,展示如何使用filter()方法进行数据过滤。

1. 添加模型

Test/app11/models.py中添加模型:

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    pub_date = models.DateTimeField('date published')

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    publication_date = models.DateField()
    price = models.DecimalField(max_digits=5, decimal_places=2)

    def __str__(self):
        return self.title  

2. 添加视图函数

Test/app11/views.py中添加视图函数:

from django.shortcuts import render
from .models import Post

def index(request):
    posts = Post.objects.all()
    return render(request, '11/index.html', {'posts': posts})

![](https://wy-static.wenxiaobai.com/chat-rag-image/3373470902464140456)

# apps/books/views.py
from django.shortcuts import render
from .models import Book

def book_list_view(request):
    # 使用filter()方法获取所有价格在10到20之间的书籍
    books = Book.objects.filter(price__gte=10, price__lte=20)
    return render(request, '11/book_list.html', {'books': books})  

3. 添加路由地址

Test/app11/urls.py中添加路由地址:

from django.urls import path
from . import views

urlpatterns = [
    path('index/', views.index, name='index'),
    path('book_list_view/', views.book_list_view, name='book_list_view'),
]  

4. 执行迁移

在终端执行以下命令进行数据迁移:

python manage.py makemigrations app11
![](https://wy-static.wenxiaobai.com/chat-rag-image/2720699906264396835)
python manage.py migrate app11  

5. 创建示例数据

Test/create_books.py中创建示例数据:

import os
import django

# 设置Django环境,需要指定settings模块
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Test.settings")
django.setup()

from app11.models import Book

def create_books():
    # 创建示例书籍
    book1 = Book(title="Python编程", author="小强", publication_date="2022-01-01", price=15.99)
    book2 = Book(title="Django Web开发", author="小龙", publication_date="2022-04-15", price=29.99)
    book3 = Book(title="算法导论", author="小龙", publication_date="2024-07-20", price=19.99)
    book4 = Book(title="java入门到弃坑", author="余胜军", publication_date="2019-02-20", price=39.99)
    book5 = Book(title="c入门到弃坑", author="小龙", publication_date="2012-07-20", price=9.99)
    book6 = Book(title="c++入门到弃坑", author="小6", publication_date="2024-02-20", price=13.99)
    book7 = Book(title="python多线程入门", author="小6", publication_date="2025-02-20", price=49.99)

    # 保存书籍到数据库
    book1.save()
    book2.save()
    book3.save()
    book4.save()
    book5.save()
    book6.save()
    book7.save()

    print("数据创建成功!")

if __name__ == "__main__":
    create_books()  

6. 访问页面

启动Django开发服务器,访问以下URL:

http://127.0.0.1:8000/app11/book_list_view/

可以看到价格在10到20块之间的书籍数据都展示出来了。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号