Django select_related()方法

avatar
作者
筋斗云
阅读量:2

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/

 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!