如何优化django查询
我有一个函数,可以将国家名称作为关键字,城市名称作为值。以下是我所做的,看起来不是最好的方法。我正在使用调试工具栏,其中显示了30个sql查询,用于获取此信息。我该怎么做才对呢如何优化django查询,django,Django,我有一个函数,可以将国家名称作为关键字,城市名称作为值。以下是我所做的,看起来不是最好的方法。我正在使用调试工具栏,其中显示了30个sql查询,用于获取此信息。我该怎么做才对呢 #models.py class City(models.Model): ci_id = models.AutoField(primary_key=True) ci_name = models.CharField(max_length=50, blank=True, null=True) coun
#models.py
class City(models.Model):
ci_id = models.AutoField(primary_key=True)
ci_name = models.CharField(max_length=50, blank=True, null=True)
country_co = models.ForeignKey('Country', on_delete=models.CASCADE, null=False)
class Country(models.Model):
co_id = models.AutoField(primary_key=True)
co_name = models.CharField(max_length=50, blank=True, null=True)
#views.py
def get_country_city():
city_dict={}
countries = Country.objects.all()
for country in countries:
c_list =[]
cities = City.objects.filter(country_co__co_id=country.co_id)
for city in cities:
c_list.append(city.ci_name)
city_dict[country.co_name] = c_list
return city_dict
您可以使用以通过一个额外的查询获取所有城市
s:
def get_country_city():
countries = Country.objects.prefetch_related('city_set')
return {
country.co_name: [city.ci_name for ci in country.city_set.all()]
for country in counties
}
您可以通过一个查询来实现这一点
from collections import defaultdict
city_dict = defaultdict(list)
for co_name, ci_name in City.objects.values_list('country_co__co_name', 'ci_name'):
city_dict[co_name].append(ci_name)
这个城市目录被用来做什么?我用它作为对ajax请求的响应。哇!这将查询从30个减少到了9个。谢谢你的帮助
from collections import defaultdict
city_dict = defaultdict(list)
for co_name, ci_name in City.objects.values_list('country_co__co_name', 'ci_name'):
city_dict[co_name].append(ci_name)