gpt4 book ai didi

Django 表单 queryset=model.objects.all() 加载缓慢

转载 作者:行者123 更新时间:2023-12-01 03:28:59 25 4
gpt4 key购买 nike

我有一个简单的模型:

class Sheker(models.Model):
name = models.CharField(max_length=90)
display_name = models.CharField(max_length=90, null=True)
search_name = models.CharField(max_length=90, null=True)

def __unicode__(self):
return self.search_name


class Sod(models.Model):
name = models.CharField(null=False, blank=False, max_length=100)
sheker = models.ManyToManyField(Sheker, blank=True, name='sheker')

用一个简单的形式:
from django import forms
from django.contrib.admin.widgets import FilteredSelectMultiple
from rosh.models import *

class SodForm(forms.ModelForm):
sheker = forms.ModelMultipleChoiceField(
queryset=Sheker.objects.all(),
widget=FilteredSelectMultiple("sheker", is_stacked=False),
required=False
)

型号 Sheker数据库中有超过 12K 行(带有地理扩展名的 postgres) - 问题是它使表单加载超慢 = 加载 html 超过 5 秒。

问题是 queryset=Sheker.objects.all() ?我怎样才能让它加载得更快/缓存它或其他东西来快速加载页面(作为普通网页)。

此类问题的最佳做法是什么?

enter image description here

最佳答案

如果查询执行得更频繁,您可以使用缓存数据库来保存值,那么这将是一个很好的解决方案。

如果页面经常使用,您可以缓存 [整个 View ] ( https://docs.djangoproject.com/en/dev/topics/cache/#the-per-view-cache ),否则仅缓存适合您的应用程序的查询。

您可以像这样缓存查询集结果:

from django.core.cache import cache
from django import forms
from django.contrib.admin.widgets import FilteredSelectMultiple
from rosh.models import *

class SodForm(forms.ModelForm):

# Check if the result is already cached
sheker_results = cache.get('sheker_results'): # Returns None if not cached earlier

# If the result is None, then query the database and set the cache
if sheker_results is None:
sheker_results = Sheker.objects.all()
cahce.set('sheker_results', sheker_results)

sheker = forms.ModelMultipleChoiceField(
queryset= sheker_results,
widget=FilteredSelectMultiple("sheker", is_stacked=False),
required=False
)

post描述了 Django 中的缓存。

关于Django 表单 queryset=model.objects.all() 加载缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39328329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com