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/

相关推荐
qq_2290580115 小时前
运行djando项目 配置启动类 label_studio包含前后端启动方法
python·django
码界奇点18 小时前
基于Python与Django的白泽自动化运维系统设计与实现
运维·python·django·毕业设计·源代码管理
计算机毕业编程指导师19 小时前
【Python大数据选题】基于Spark+Django的电影评分人气数据可视化分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·spark·django·电影评分人气
Python极客之家19 小时前
基于Django的高校二手市场与社交系统
后端·python·数据挖掘·django·毕业设计
码界奇点21 小时前
基于Django与Zabbix集成的运维故障管理系统设计与实现
运维·django·毕业设计·zabbix·源代码管理
码界奇点21 小时前
基于Django与Ansible的自动化运维管理系统设计与实现
运维·python·django·毕业设计·ansible·源代码管理
U盘失踪了21 小时前
Django 学生成绩管理系统
django
倔强青铜三3 天前
Django 6.0来袭!这些新特性,真的令人振奋!
人工智能·python·django
Java水解4 天前
Django实现接口token检测的实现方案
后端·django
飞Link4 天前
【Django】Django 调用外部 Python 程序的完整指南
后端·python·django·sqlite