1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 获取问题相关的基础模块
from __future__ import unicode_literals, absolute_import, print_function
from collections import defaultdict
from django.db.models import Q
from gm_types.mimas.enum import MEDIA_IMAGE_URL_SOURCE
from qa.models.answer import (
Question, QuestionImage,
QuestionTag,
QuestionTagV3,
)
from utils.base_manager import BaseManager
from communal.normal_manager import (
tag_manager,
)
class QuestionManager(BaseManager):
model = Question
base_query = Q(is_online=True)
@staticmethod
def get_base_info(question):
"""
获取问题的基本信息
:param question:
:return:
"""
return {
"id": question.id,
"question_id": question.id,
"user_id": question.user_id,
"title": question.title, # 注意这是原始数据
"question_content": question.content, # 注意这是原始数据
"content_type": question.content_type,
"platform": question.platform,
"is_online": question.is_online,
"is_recommend": question.is_recommend,
"create_timestamp": int(question.create_time.timestamp()),
}
@staticmethod
def get_tags_by_question_ids(question_ids):
return list(QuestionTag.objects.filter(question_id__in=question_ids))
@staticmethod
def get_tags_info_by_question_tags(question_tags):
tag_ids = [item.tag_id for item in question_tags]
tags_info_dic = tag_manager.get_tags_info_by_ids(tag_ids)
_result = defaultdict(list)
for item in question_tags:
_tag_info = tags_info_dic.get(item.tag_id, {})
if _tag_info:
_result[item.question_id].append(_tag_info)
return dict(_result)
@staticmethod
def get_tags_info_by_question_ids(question_ids):
"""
通过问题id获取标签信息
:param question_ids:
:return:
"""
question_tags = QuestionManager.get_tags_by_question_ids(question_ids)
return QuestionManager.get_tags_info_by_question_tags(question_tags)
@staticmethod
def get_tags_v3_by_question_ids(question_ids):
return list(QuestionTagV3.objects.filter(question_id__in=question_ids))
@staticmethod
def get_tags_v3_info_by_question_tags(question_tags_v3):
tag_v3_ids = [item.tag_v3_id for item in question_tags_v3]
tags_info_dic = tag_manager.get_tags_v3_info_by_ids(tag_v3_ids)
_result = defaultdict(list)
for item in question_tags_v3:
_tag_info = tags_info_dic.get(item.tag_v3_id, {})
if _tag_info:
_result[item.question_id].append(_tag_info)
return dict(_result)
@staticmethod
def get_tags_v3_info_by_question_ids(question_ids):
"""
通过问题id获取标签3.0的信息
:param question_ids:
:return:
"""
question_tags = QuestionManager.get_tags_v3_by_question_ids(question_ids)
return QuestionManager.get_tags_v3_info_by_question_tags(question_tags)
def get_question_base_list_info_by_obj_list(self, question_obj_list):
"""
:param question_obj_list: 问题对象列表
:return:
"""
result = {
"questions": {},
"valid_user_ids": [],
"raw_medias": {},
}
if not question_obj_list:
return result
_user_ids = []
q_text_dic = {}
for question in question_obj_list:
_id = question.id
_user_ids.append(question.user_id)
q_text_dic[_id] = question.content
result["questions"].update({
_id: self.get_base_info(question),
})
result["valid_user_ids"] = _user_ids
result["raw_medias"] = q_text_dic
return result
@classmethod
def get_header_imgs_by_ids(answer_ids):
images = QuestionImage.objects.filter(image_url_source=MEDIA_IMAGE_URL_SOURCE.HEAD).order_by('id')
result = defaultdict(list)
for image in images:
result[image.answer_id].append(image.image_info_data)
return result