Skip to content

Django ORM & Views API

Django ORM provides a powerful database abstraction layer; Views handle HTTP requests and template responses.

1 class · 8 methods

QuerySet & Views

8 methods

QuerySet 数据库查询与视图渲染的核心 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

NameTypeDescription
kwargsdict字段查找条件,如 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

NameTypeDescription
kwargsdict精确匹配条件,通常为主键或唯一字段

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

NameTypeDescription
kwargsdict字段名与值的映射

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

NameTypeDescription
fieldstuple[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

NameTypeDescription
kwargsdict注解名到聚合表达式的映射

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

NameTypeDescription
requestHttpRequest当前请求对象
templatestr模板文件路径
contextdict传给模板的上下文变量

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