This commit is contained in:
parent
e46de27ba9
commit
5bd9c9750d
|
@ -106,18 +106,18 @@ def query_shouts():
|
||||||
return q, aliased_reaction
|
return q, aliased_reaction
|
||||||
|
|
||||||
|
|
||||||
def parse_aggregated_string(aggregated_str):
|
def parse_aggregated_string(aggregated_str, model_class):
|
||||||
"""
|
"""
|
||||||
Преобразует строку, полученную из string_agg, обратно в список словарей.
|
Преобразует строку, полученную из string_agg, обратно в список объектов.
|
||||||
|
|
||||||
:param aggregated_str: Строка, содержащая агрегированные данные.
|
:param aggregated_str: Строка, содержащая агрегированные данные.
|
||||||
:return: Список словарей с данными.
|
:param model_class: Класс модели, экземпляры которой нужно создать.
|
||||||
|
:return: Список объектов модели.
|
||||||
"""
|
"""
|
||||||
if not aggregated_str:
|
if not aggregated_str:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
items = []
|
items = []
|
||||||
# Изменяем разделитель на символ |, соответствующий используемому в агрегации
|
|
||||||
for item_str in aggregated_str.split(" | "):
|
for item_str in aggregated_str.split(" | "):
|
||||||
item_data = {}
|
item_data = {}
|
||||||
for field in item_str.split(";"):
|
for field in item_str.split(";"):
|
||||||
|
@ -125,10 +125,11 @@ def parse_aggregated_string(aggregated_str):
|
||||||
key, value = field.split(":", 1)
|
key, value = field.split(":", 1)
|
||||||
item_data[key] = value
|
item_data[key] = value
|
||||||
else:
|
else:
|
||||||
# Лог или обработка случаев, когда разделитель отсутствует
|
|
||||||
logger.error(f"Некорректный формат поля: {field}")
|
logger.error(f"Некорректный формат поля: {field}")
|
||||||
continue
|
continue
|
||||||
items.append(item_data)
|
# Создание экземпляра модели на основе словаря
|
||||||
|
item_object = model_class(**item_data)
|
||||||
|
items.append(item_object)
|
||||||
|
|
||||||
return items
|
return items
|
||||||
|
|
||||||
|
@ -167,8 +168,8 @@ def get_shouts_with_stats(q, limit, offset=0, author_id=None):
|
||||||
authors,
|
authors,
|
||||||
topics,
|
topics,
|
||||||
) in results:
|
) in results:
|
||||||
shout.authors = parse_aggregated_string(authors)
|
shout.authors = parse_aggregated_string(authors, Author)
|
||||||
shout.topics = parse_aggregated_string(topics)
|
shout.topics = parse_aggregated_string(topics, Topic)
|
||||||
shout.stat = {
|
shout.stat = {
|
||||||
"viewed": ViewedStorage.get_shout(shout.id),
|
"viewed": ViewedStorage.get_shout(shout.id),
|
||||||
"followers": followers_stat or 0,
|
"followers": followers_stat or 0,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user