将 Django 查询集转换为 json 树
Convert a django queryset to json tree
假设我的模型中有两个表:
class Country(models.Model):
CountryName = models.CharField(max_length=20)
class City(models.Model):
CityName = models.CharField(max_length=20)
Country = models.ForeignKey(Country)
在我看来我做了一个 json:
list = City.objects.annotate(CountryName=F('Country__CountryName')).values('CityName', 'CountryName').prefetch_related('Country')
return HttpResponse(json.dumps([any_entry for any_entry in list]))
结果我收到类似的东西:
{[{CityName: 'Vancouver', CountryName: 'Canada'},
{CityName: 'Montreal', CountryName: 'Canada'},
{CityName: 'Dallas', CountryName: 'USA'}]}
虽然我想要这样的东西:
{[
{
CountryName: 'Canada',
Cities: [{CityName: 'Vancouver'},
{CityName: 'Montreal'}]
},
{
CountryName: 'USA',
Cities: [{CityName: 'Dallas'}]
}
]}
或至少:
{
Canada: ['vancouver','Montreal'],
USA: ['Dallas']
}
最后,我使用了下面的代码:
from collections import defaultdict
city_list = defaultdict(list)
for any_city in City.objects.annotate(CountryName=F('Country__CountryName')).values('CityName', 'CountryName'):
city_list[any_city['CountryName']].append(any_city['CityName'])
return HttpResponse(json.dumps(city_list))
假设我的模型中有两个表:
class Country(models.Model):
CountryName = models.CharField(max_length=20)
class City(models.Model):
CityName = models.CharField(max_length=20)
Country = models.ForeignKey(Country)
在我看来我做了一个 json:
list = City.objects.annotate(CountryName=F('Country__CountryName')).values('CityName', 'CountryName').prefetch_related('Country')
return HttpResponse(json.dumps([any_entry for any_entry in list]))
结果我收到类似的东西:
{[{CityName: 'Vancouver', CountryName: 'Canada'},
{CityName: 'Montreal', CountryName: 'Canada'},
{CityName: 'Dallas', CountryName: 'USA'}]}
虽然我想要这样的东西:
{[
{
CountryName: 'Canada',
Cities: [{CityName: 'Vancouver'},
{CityName: 'Montreal'}]
},
{
CountryName: 'USA',
Cities: [{CityName: 'Dallas'}]
}
]}
或至少:
{
Canada: ['vancouver','Montreal'],
USA: ['Dallas']
}
最后,我使用了下面的代码:
from collections import defaultdict
city_list = defaultdict(list)
for any_city in City.objects.annotate(CountryName=F('Country__CountryName')).values('CityName', 'CountryName'):
city_list[any_city['CountryName']].append(any_city['CityName'])
return HttpResponse(json.dumps(city_list))