【发布时间】:2019-10-09 06:25:44
【问题描述】:
Activity是旅游信息,tag(Preference)是标签信息(比如Instagram hash tag)。
Activity ListPreference api的功能: 对于每个活动,检查每个活动是否包含请求列表中的标签。只有包含标签的活动才会被序列化。
但是太慢了。大约需要 1 分钟。
返回所有活动的api只需要2秒。
有什么问题?
class ActivityListByPreference(APIView):
permission_classes = (permissions.AllowAny,)
def get(self, request):
request_tag = [6, 7, 8]
activity_list = []
activity_items = Activity.objects.filter()
activity_nums=activity_items.values_list('num', flat=True)
b=1
for activity_num in activity_nums:
print(activity_num)
activity_preference_items = Activity_Preference.objects.filter(activity_num_id=activity_num)
activity_tag = []
preference_nums= activity_preference_items.values_list('preference_num_id',flat=True)
activity_tag=list(preference_nums)
intersection = set([])
intersection = set(request_tag).intersection(set(activity_tag))
inter_list = list(intersection)
inter_list.sort()
if (request_tag == inter_list):
print('포함합니다.')
activity_list.append(activity_num)
activity_preference_items = Activity_Preference.objects.all()
for activity_preference_item in activity_preference_items:
activity_tag.append(activity_preference_item.preference_num_id)
print('끝')
data = Activity.objects.filter(pk__in=activity_list)
serializer = ActivitySerializer(data, many=True)
print(data)
return Response({"ActivityListByPreference" : serializer.data})
【问题讨论】:
-
您使用的是什么数据库引擎?另外,Activity.objects.all() 中有多少项(大约)?
-
您对数据库的请求太多了。您至少达到了数据库中
Activities的数量。查看您的模型Activity和Activity_Preference可能会很有用。在我看来,您没有使用正确的ForeignKey。
标签: python django django-rest-framework restful-url