gpt4 book ai didi

每次迭代的 Django 查询都会访问数据库

转载 作者:行者123 更新时间:2023-12-04 18:23:01 25 4
gpt4 key购买 nike

我有一些 模型.py 像这样:

class Muestraonline(models.Model):
accessionnumber = models.ForeignKey(Muestra, related_name='online_accessionnumber')
muestraid = models.ForeignKey(Muestra)
taxonid = models.ForeignKey(Taxon, null=True, blank=True)
...

class Muestra(models.Model):
muestraid = models.IntegerField(primary_key=True, db_column='MuestraID') # Field name made lowercase.
latitudedecimal = models.DecimalField(decimal_places=6, null=True, max_digits=20, db_column='LatitudeDecimal', blank=True) # Field name made lowercase.
longitudedecimal = models.DecimalField(decimal_places=6, null=True, max_digits=20, db_column='LongitudeDecimal', blank=True) # Field name made lowercase.
...

还有我的 View .py 我想获得独特的标本并找到所有共享该分类的标本。对于相关标本,我只需要纬度/经度信息:
def specimen_detail(request, accession_number=None, specimen_id=None):
specimen = Muestraonline.objects.get(accessionnumber=accession_number, muestraid=specimen_id)
related_specimens = Muestraonline.objects.filter(taxonid=specimen.taxonid).exclude(id=specimen.id)

# create array for the related specimen points
related_coords = []
# loop through results and populate array
for relative in related_specimens:
latlon = (format(relative.muestraid.latitudedecimal), format(relative.muestraid.longitudedecimal))
related_coords.append(latlon)
related_coords = simplejson.dumps(related_coords)

但是当我遍历 related_specimens它最终会为每个 relative 打一次数据库.我不应该能够得到 latitudedecimal吗?和 longitudedecimal我只需要一个额外的数据库查询格式的值?我知道我在这里的方法中遗漏了一些非常基本的东西,只是不确定完成这项工作的最佳方法。

任何帮助将非常感激。

最佳答案

只需使用 select_related在您的查询集中:

related_specimens = Muestraonline.objects.filter(taxonid=specimen.taxonid).exclude(id=specimen.id).select_related('muestraid')

那将加入您的 Muestraonline型号为 Muestra幕后和每个 Muestraonline QuerySet 返回的实例也将包含 Muestra 的缓存实例。 .

关于每次迭代的 Django 查询都会访问数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10255011/

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