Django 基础教程

Django 查询

Django 展示数据

Django Admin

Django 模板

Django 表单组件

Django 高级

Django FAQ

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/django-filter.html

Django 条件筛选 filter 查询不同方式详解


在 Django 中,条件筛选查询是指通过使用数据库查询语言来从数据库中检索特定条件的数据。Django 提供了 QuerySet API 来实现条件筛选查询,QuerySet 是一个代表数据库中一组对象的对象集合。通过在 QuerySet 上链式调用方法,您可以构建复杂的条件查询。

假设我们有一个简单的模型 Book,它包含以下字段:

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    publication_year = models.IntegerField()
    is_available = models.BooleanField(default=True)

我们将使用此模型来演示条件筛选查询的不同方式。

基本条件查询

最简单的条件查询是使用 filter() 方法。它会返回满足指定条件的所有对象。

# 导入模型
from myapp.models import Book

# 获取所有可用的书籍
available_books = Book.objects.filter(is_available=True)

# 获取特定作者的书籍
specific_author_books = Book.objects.filter(author="John Doe")

# 获取特定年份出版的书籍
specific_year_books = Book.objects.filter(publication_year=2022)

多条件查询

您可以将多个条件组合在一起使用。默认情况下,多个条件是“与”关系。

# 获取特定作者的特定年份可用的书籍
specific_author_and_year_books = Book.objects.filter(author="John Doe", publication_year=2022)

# 获取特定作者的可用书籍或特定年份的书籍
specific_author_or_year_books = Book.objects.filter(models.Q(author="John Doe") | models.Q(publication_year=2022))

# 获取特定作者的特定年份以外的书籍
specific_author_and_not_year_books = Book.objects.filter(models.Q(author="John Doe") & ~models.Q(publication_year=2022))

进一步筛选

您可以使用更多的方法来进一步筛选结果。例如,exclude() 方法排除满足指定条件的对象,get() 方法返回单个对象而不是 QuerySet 等等。

# 排除特定作者的书籍
non_specific_author_books = Book.objects.exclude(author="John Doe")

# 获取特定标题的单个书籍
specific_book = Book.objects.get(title="The Great Gatsby")

模糊查询

使用 icontains 进行模糊查询。

# 获取标题中包含关键字的书籍
keyword = "Python"
books_with_keyword = Book.objects.filter(title__icontains=keyword)

 

当您提到"Djangofilter"时,我想您可能在讨论Django框架中的数据库查询过滤功能,该功能允许您在从数据库中检索数据时应用筛选条 ...
使用filter()方法进行多条件过滤解释:filter()方法是Django查询集的常见方法之一,它用于根据指定的条件筛选数据库中的记录。 ...
不同查询方式使用ORM(对象关系映射)进行查询ORM是Django的核心,它允许你通过Python代码来执行数据库查询,而无需直接编写SQL ...
在Django中,分页是指将大量数据分成一系列小的数据块,以便在页面上逐步显示,从而提高用户体验和减轻服务器负担。在下面,我将为您介绍两种常 ...
Lucene 的查询操作最终需要调用 IndexSearcher 类中的 search 方法,同时传入 Query 实例作为参数。Query ...