Django select_related()方法

select_related()的作用

select_related()是Django ORM(对象关系映射)中的一种查询优化方法,主要用于减少数据库查询次数,提高查询效率。当你在查询一个模型实例时,如果这个实例有ForeignKey关联到其他模型,那么select_related()可以帮助你在一次数据库查询中同时获取到这些关联模型的数据。

1,创建应用

Test/app12

复制代码
python manage.py startapp app12

2,注册应用

Test/Test/settings.py

3,添加应用路由

Test/Test/urls.py

复制代码
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('app12/', include('app12.urls')),
]

4,添加模型

Test/app12/models.py

复制代码
# models.py
from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    author = models.ForeignKey(Author, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

5,添加视图函数

Test/app12/views.py

复制代码
# views.py
from django.shortcuts import render
from .models import Post

def post_list(request):
    posts = Post.objects.select_related('author').all()
    return render(request, '12/post_list.html', {'posts': posts})

6,添加html代码

Test/templates/12/post_list.html

复制代码
<!-- post_list.html -->
{% for post in posts %}
    <h2>{{ post.title }}</h2>
    <p>By: {{ post.author.name }}</p>
    <p>{{ post.content }}</p>
{% endfor %}

7,添加路由地址

复制代码
from django.urls import path
from . import views

urlpatterns = [

    path('post_list/', views.post_list, name='post_list'),
]

8,添加数据

Test/add_data.py

复制代码
import os
import django
import random
from faker import Faker

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Test.settings")
django.setup()

from app12.models import Author, Post

fake = Faker()

def add_data():
    for _ in range(100):
        author = Author.objects.create(name=fake.name())
        for _ in range(10):
            Post.objects.create(
                title=fake.sentence(),
                content=fake.text(),
                author=author
            )

if __name__ == '__main__':
    add_data()

9,访问页面

127.0.0.1:8000/app12/post_list/

相关推荐
AC赳赳老秦7 小时前
OpenClaw二次开发入门:自定义技能,适配自身工作需求
服务器·数据库·python·mysql·django·deepseek·openclaw
暴力袋鼠哥12 小时前
基于 LightGBM 的山东高考智能择校推荐系统设计与实现
python·django·flask
源码之家14 小时前
计算机毕业设计:Python新能源汽车数据分析与个性化推荐系统 Django框架 snowNLP 协同过滤推荐算法 requests爬虫 可视化(建议收藏)✅
大数据·python·机器学习·数据分析·django·汽车·课程设计
AC赳赳老秦1 天前
Windows 系统 OpenClaw 执行策略报错及管理员权限设置深度解析与实操指南
运维·人工智能·python·django·自动化·媒体·openclaw
vx_biyesheji00012 天前
计算机毕业设计:Python汽车市场智能决策系统 Flask框架 可视化 机器学习 AI 大模型 大数据(建议收藏)✅
大数据·人工智能·python·算法·django·汽车·课程设计
橘子编程2 天前
Django全栈开发终极指南
后端·python·django·npm·html·pandas·html5
小陈工2 天前
Python Web开发入门(八):用户认证系统实现,给你的应用加上安全锁
开发语言·前端·数据库·python·安全·django·sqlite
北冥有羽Victoria3 天前
Django 实战:SQLite 转 MySQL 与 Bootstrap 集成
大数据·服务器·python·django·编辑器
huabiangaozhi3 天前
vscode配置django环境并创建django项目(全图文操作)
vscode·django·sqlite
湛生4 天前
django学习
数据库·后端·python·django·sqlite