【问题标题】:Convert a django queryset to json tree将 django 查询集转换为 json 树
【发布时间】:2017-01-23 13:37:33
【问题描述】:

假设我的模型中有两个表:

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

【问题讨论】:

  • 检查这里看看是否有帮助:stackoverflow.com/questions/12731897/…
  • @souldeux:谢谢,但是如果我有 3 个级别而不是 2 个级别会怎样。(考虑添加状态)您确定这种方法具有最佳性能吗?

标签: json ajax django python-3.x django-queryset


【解决方案1】:

最后,我使用了以下代码:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 2020-11-14
    • 2019-07-14
    • 2021-11-08
    • 1970-01-01
    • 2019-01-26
    • 2019-04-23
    相关资源
    最近更新 更多