• 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

    1. from django.contrib import admin
    2. from django.urls import path, include
    3. urlpatterns = [
    4. path('app12/', include('app12.urls')),
    5. ]

    4,添加模型

    Test/app12/models.py

    1. # models.py
    2. from django.db import models
    3. class Author(models.Model):
    4. name = models.CharField(max_length=100)
    5. def __str__(self):
    6. return self.name
    7. class Post(models.Model):
    8. title = models.CharField(max_length=200)
    9. content = models.TextField()
    10. author = models.ForeignKey(Author, on_delete=models.CASCADE)
    11. def __str__(self):
    12. return self.title

    5,添加视图函数

    Test/app12/views.py

    1. # views.py
    2. from django.shortcuts import render
    3. from .models import Post
    4. def post_list(request):
    5. posts = Post.objects.select_related('author').all()
    6. return render(request, '12/post_list.html', {'posts': posts})

    6,添加html代码

    Test/templates/12/post_list.html

    1. {% for post in posts %}
    2. <h2>{{ post.title }}h2>
    3. <p>By: {{ post.author.name }}p>
    4. <p>{{ post.content }}p>
    5. {% endfor %}

    7,添加路由地址

    1. from django.urls import path
    2. from . import views
    3. urlpatterns = [
    4. path('post_list/', views.post_list, name='post_list'),
    5. ]

    8,添加数据

    Test/add_data.py

    1. import os
    2. import django
    3. import random
    4. from faker import Faker
    5. os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Test.settings")
    6. django.setup()
    7. from app12.models import Author, Post
    8. fake = Faker()
    9. def add_data():
    10. for _ in range(100):
    11. author = Author.objects.create(name=fake.name())
    12. for _ in range(10):
    13. Post.objects.create(
    14. title=fake.sentence(),
    15. content=fake.text(),
    16. author=author
    17. )
    18. if __name__ == '__main__':
    19. add_data()

     

     

    9,访问页面

    127.0.0.1:8000/app12/post_list/

     

  • 相关阅读:
    Node学习七 —— 创建和控制外部进程
    使用 ClickHouse 深入了解 Apache Parquet (二)
    java-php-net-python-校园后勤计算机毕业设计程序
    为何电脑从 C 盘开始? A、B 盘去哪了
    Vue2-replace属性、编程式路由导航、缓存路由组件、两个新的生命周期钩子、路由守卫、路由器工作模式
    超详细的文件上传和下载(Spring Boot)
    179. 最大数
    使用 nohup 运行 Python 脚本
    聊聊HttpClient的HttpRoutePlanner
    【前端】移动互联动画
  • 原文地址:https://blog.csdn.net/qq_26086231/article/details/140448622