需要优化&与Django ORM Query相关的性能

时间:2013-11-13 07:15:46

标签: python sql django json django-orm

我在django 1.4.5中编写了一个API,它将JSON数据返回给第三方应用程序。

这是我目前检索数据的方法,但需要更多时间,因为我还需要在JSON中提供相关数据。

def get_speakers(request)
     speakers = Person.objects.filter(profile__person_type__name='Speaker').select_related('series')
     for speaker in speakers:
         data['first_name'] = speaker.first_name
         data['last_name'] = speaker.last_name
         data['series_name'] = speaker.series.name
         data['series_id'] = speaker.series.id
     return JSONResponse(data_dict)

为了实现优化,我尝试了以下内容。

def get_speakers(request)
     speakers = Person.objects.filter(profile__person_type__name='Speaker').select_related('series')
     data_dict = serializers.serialize("python", speakers)
     return JSONResponse(data_dict)

但它返回JSON中相关数据的外键,这是无用的,因为我无法获取其相关数据。

它也尝试原始sql然后数据返回元组但我们需要字典格式。

需要帮助才能实现这一目标。

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果我是你,我会使用以下内容。

def get_speakers(request)
     speakers = Person.objects.filter(profile__person_type__name='Speaker').values('first_name', 'last_name', 'series__name', 'series__id')
     return JSONResponse(speakers)

在django ORM中,在命名字段时仅使用一个下划线_。由于两个下划线有另一种用法。在您的示例系列中是外键,如果您希望在过滤和获取值时访问其字段,可以使用类似'series__name'来获取相关记录的名称字段。

values方法外,还有values_list方法。您可以使用哪种方式最适合您。