模型參考上一章內容:
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 Postdef index(request):posts = Post.objects.all()return render(request, '11/index.html', {'posts': posts})# apps/books/views.pyfrom django.shortcuts import render
from .models import Bookdef 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 viewsurlpatterns = [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