2016-09-15 82 views
0

假设我在我的模型两个表:转换一个Django的queryset到JSON树

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'] 
} 
+1

入住这里,看看是否有所帮助:http://stackoverflow.com/questions/12731897/ group-by-foreign-key-and-show-related-items-django – souldeux

+0

@souldeux:谢谢但是如果我有3个级别而不是2级(考虑添加状态)并且你确定这个方法有最好的性能吗? – Ahmad

回答

0

最后,我用下面的代码:

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))