Django 查询数据

模型参考上一章内容:

Django QuerySet对象,filter()方法-CSDN博客

查询数据可以通过以下方法:

Book.objects.all()
Book.objects.filter() 
Book.objects.get()

1,添加视图函数

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})



# 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)  # __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”(小于)的缩写。
    return render(request, '11/book_list.html', {'books': books})

def get_book_view(request):
    try:
        # 使用get()方法获取标题为"Python Cookbook"的书籍
        book = Book.objects.get(id=19)
        # 现在book变量包含了匹配的书籍对象
        print(book)
        return render(request, '11/book_detail.html', {'book': book})
    except Book.DoesNotExist:
        # 如果没有找到匹配的书籍,返回错误信息
        return HttpResponse("Book not found.")
    except Book.MultipleObjectsReturned:
        # 如果找到多个匹配的书籍,返回错误信息
        return HttpResponse("Multiple books found with the same title.")



def book_list_view_exclude(request):
    # 使用exclude()方法获取所有价格不等于10且标题不包含"Python"的书籍
    books = Book.objects.exclude(price=9.99).exclude(title__icontains="Python")
    return render(request, '11/book_list_exclude.html', {'books': books})


def book_list_view_values(request):
    # 使用values()方法获取所有书籍的标题和作者
    books_data = Book.objects.values('title', 'author')
    print(books_data)
    for i in books_data:
        print(type(i))

    # 将数据传递给模板
    return render(request, '11/book_list_view_values.html', {'books_data': books_data})

def book_list_view_distinct(request):
    # 使用values()和distinct()方法获取所有不同作者的书籍
    books_data = Book.objects.values('author').distinct()

    # 打印查询结果
    print(books_data)

    # 将数据传递给模板
    return render(request, '11/books_distinct.html', {'books_data': books_data})


def book_list_view_select(request):
    books_data = Book.objects.all()
    print(type(books_data))

    books_data2 = Book.objects.filter(id=19)
    print(books_data2)

    books_data3 = Book.objects.get(id=1)
    print(books_data3)


    # 将数据传递给模板
    return render(request, '11/book_select.html', {'books_data': books_data, 'books_data2': books_data2, 'books_data3': books_data3})


2,添加html代码

Test/templates/11/book_select.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

 {{  books_data }}
 <br/>
 {{  books_data2 }}
 <br/>
 {{  books_data3 }}

</body>
</html>

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'),
    path('get_book_view/', views.get_book_view, name='get_book_view'),
    path('book_list_view_exclude/', views.book_list_view_exclude, name='book_list_view_exclude'),
    path('book_list_view_values/', views.book_list_view_values, name='book_list_view_values'),
    path('book_list_view_distinct/', views.book_list_view_distinct, name='book_list_view_distinct'),
    path('book_list_view_select/', views.book_list_view_select, name='book_list_view_select'),
]

4,访问页面

http://127.0.0.1:8000/app11/book_list_view_select/

 

5,注意点

需要注意的是,filter()和get()方法都可以查询数据,但是filter()在查询不到数据时,不会有任何提示,get()则会返回DoesNotExist

相关推荐

  1. Django查询每月的最后一条数据

    2024-07-11 07:26:04       52 阅读
  2. Django杂记之数据查询和文件处理

    2024-07-11 07:26:04       26 阅读
  3. Web框架开发-Django-数据库表的单表查询

    2024-07-11 07:26:04       40 阅读
  4. django查询优化

    2024-07-11 07:26:04       59 阅读
  5. Django】聚合查询

    2024-07-11 07:26:04       44 阅读
  6. Django-聚合查询

    2024-07-11 07:26:04       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 07:26:04       101 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 07:26:04       108 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 07:26:04       91 阅读
  4. Python语言-面向对象

    2024-07-11 07:26:04       98 阅读

热门阅读

  1. Django 视图 - FBV 与 CBV

    2024-07-11 07:26:04       24 阅读
  2. Qt编程技巧小知识点(1)TCP缓存区数据读取

    2024-07-11 07:26:04       24 阅读
  3. uniapp小程序连接蓝牙设备

    2024-07-11 07:26:04       21 阅读
  4. 富格林:可信技巧隔绝遭遇欺诈

    2024-07-11 07:26:04       22 阅读
  5. WPF-控件样式设置

    2024-07-11 07:26:04       28 阅读
  6. C# —— BufferedStream的

    2024-07-11 07:26:04       24 阅读
  7. 如何理解李彦宏说的“不要卷模型,要卷应用”

    2024-07-11 07:26:04       27 阅读
  8. 第一节 SHELL脚本中的常用命令(2)

    2024-07-11 07:26:04       24 阅读