Django Q()函数
Q() 函数的作用
在Django中,Q()函数是一个非常有用的工具,主要用于构建复杂的查询。它允许你创建复杂的查询语句,包括AND、OR和NOT逻辑操作。这对于处理复杂的数据库查询特别有用,特别是在你需要组合多个条件或处理复杂的过滤逻辑时。
Q对象允许你使用关键字参数或Q对象的组合来构建查询。Q对象可以被链接在一起,使用
&
表示AND,
|
表示OR,
~
表示NOT。
示例
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,添加视图函数
- 查询所有标题包含"Python"的书籍。
- 查询所有作者为"John Doe"的书籍。
- 查询所有在2020年之后出版的书籍。
- 查询所有价格在20到30之间的书籍。
- 查询所有标题包含"Python"或作者为"John Doe"的书籍。
- 查询所有标题包含"Python"且价格在20到30之间的书籍。
- 查询所有不在2020年出版的书籍。
Test/app11/views.py
from django.shortcuts import render
from django.db.models import Q
def book_list_Q(request):
# 1. 查询所有标题包含"Python"的书籍
# books = Book.objects.filter(Q(title__icontains='Python'))
# 2. 查询所有作者为"John Doe"的书籍
# books = Book.objects.filter(Q(author='John Doe'))
# 3. 查询所有在2020年之后出版的书籍
# books = Book.objects.filter(Q(publication_date__year__gt=2020))
# 4. 查询所有价格在20到30之间的书籍
# books = Book.objects.filter(Q(price__gte=20) & Q(price__lte=30))
# 5. 查询所有标题包含"Python"或作者为"John Doe"的书籍
# books = Book.objects.filter(Q(title__icontains='Python') | Q(author='John Doe'))
# 6. 查询所有标题包含"Python"且价格在20到30之间的书籍
# books = Book.objects.filter(Q(title__icontains='Python') & Q(price__gte=20) & Q(price__lte=30))
# 7. 查询所有不在2020年出版的书籍
books = Book.objects.filter(~Q(publication_date__year=2020))
return render(request, '11/book_list.html', {'books': books})
3,添加html代码
Test/templates/11/book_list.html
Book List
List of Books
{% if books %}
-
{% for book in books %}
-
Title: {{ book.title }}
Author: {{ book.author }}
Publication Date: {{ book.publication_date }}
Price: {{ book.price }}
{% endfor %}
No books found.
{% endif %}4,添加路由地址
Test/app11/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('book_list_Q/', views.book_list_Q, name='book_list_Q'),
]
5,访问页面
http://127.0.0.1:8000/app11/book_list_Q/
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!





