QuerySet & Views
8 methodsQuerySet 数据库查询与视图渲染的核心 API。
Model.objects.all()返回模型对应数据库表中所有记录的 QuerySet。
Returns
QuerySet[Model] — 包含全部记录的查询集
Example
django
from myapp.models import Book
books = Book.objects.all()
for book in books:
print(book.title)Model.objects.filter(**kwargs)根据关键字条件过滤记录,返回匹配的 QuerySet。
Parameters
| Name | Type | Description |
|---|---|---|
| kwargs | dict | 字段查找条件,如 title__icontains='python' |
Returns
QuerySet[Model] — 满足条件的记录集合
Example
django
from myapp.models import Book
books = Book.objects.filter(published=True, author="Guido")
print(books.count())
# 链式查找
recent = Book.objects.filter(title__icontains="python").order_by("-pub_date")Model.objects.get(**kwargs)返回唯一匹配条件的对象;若找到多条或零条会抛出异常。
Parameters
| Name | Type | Description |
|---|---|---|
| kwargs | dict | 精确匹配条件,通常为主键或唯一字段 |
Returns
Model — 单个模型实例
Example
django
from myapp.models import Book
from django.core.exceptions import ObjectDoesNotExist
try:
book = Book.objects.get(pk=1)
print(book.title)
except Book.DoesNotExist:
print("Not found")Model.objects.create(**kwargs)创建并保存一条新记录,返回新建的模型实例。
Parameters
| Name | Type | Description |
|---|---|---|
| kwargs | dict | 字段名与值的映射 |
Returns
Model — 已写入数据库的新实例
Example
django
from myapp.models import Book
book = Book.objects.create(title="Fluent Python", author="Luciano", pages=800)
print(book.id) # 自动生成的主键QuerySet.values(*fields)返回包含字典(而非模型实例)的 QuerySet,仅取指定字段。
Parameters
| Name | Type | Description |
|---|---|---|
| fields | tuple[str] | 需要提取的字段名 |
Returns
QuerySet[dict] — 字典迭代器
Example
django
from myapp.models import Book
rows = Book.objects.values("id", "title")
for row in rows:
print(row["id"], row["title"])QuerySet.annotate(**kwargs)为 QuerySet 中每个对象附加聚合或计算字段。
Parameters
| Name | Type | Description |
|---|---|---|
| kwargs | dict | 注解名到聚合表达式的映射 |
Returns
QuerySet[Model] — 带注解字段的查询集
Example
django
from django.db.models import Count
from myapp.models import Author
authors = Author.objects.annotate(book_count=Count("book"))
for a in authors:
print(a.name, a.book_count)request.GET / request.POST访问 HTTP 请求中的查询参数(GET)或表单数据(POST),类似字典的对象。
Returns
QueryDict — 请求参数字典
Example
django
from django.http import HttpResponse
def search(request):
q = request.GET.get("q", "")
page = request.GET.get("page", "1")
return HttpResponse(f"搜索: {q}, 页码: {page}")render(request, template, context)加载模板并以 context 渲染,返回 HttpResponse。
Parameters
| Name | Type | Description |
|---|---|---|
| request | HttpRequest | 当前请求对象 |
| template | str | 模板文件路径 |
| context | dict | 传给模板的上下文变量 |
Returns
HttpResponse — 渲染后的 HTML 响应
Example
django
from django.shortcuts import render
from myapp.models import Book
def book_list(request):
books = Book.objects.all()
return render(request, "books/list.html", {"books": books})