我在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然后数据返回元组但我们需要字典格式。
需要帮助才能实现这一目标。
提前致谢。
答案 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方法。您可以使用哪种方式最适合您。