diff --git a/shared/models.py b/shared/models.py index 4001687010ba8f370aa8f8a04440fb565d85fa3d..187a4be4c0e86467d530540e84807039a38a5272 100644 --- a/shared/models.py +++ b/shared/models.py @@ -421,31 +421,68 @@ class ArticlesMixin(models.Model): results = results.order_by("union_date") - evaluated = list(results) - - mapped_to_real_values = list( - map( - lambda unioned: { - "id": unioned["union_id"], - "page_ptr_id": unioned["union_page_ptr_id"], - "perex": unioned["union_perex"], - "date": unioned["union_date"], - "author": unioned["union_author"], - "image_id": unioned["union_image_id"], - "search_image_id": unioned["union_search_image_id"], - "content": unioned["union_content"], - "author_page_id": unioned["union_author_page_id"], - "region": unioned["union_author_page_id"], - "article_type": unioned["union_article_type"], - "is_black": unioned["union_is_black"], - "thumb_image_id": unioned["union_thumb_image_id"], - "shared": unioned["shared"], - }, - evaluated, + evaluated = list( + results + ) # We MUST eval here since we can't turn values() into concrete class instances in QuerySet after union + + if source is SharedArticleTypes.DISTRICT: + return list( + map( + lambda unioned: DistrictArticlePage( + id=unioned["union_id"], + page_ptr_id=unioned["union_page_ptr_id"], + perex=unioned["union_perex"], + date=unioned["union_date"], + author=unioned["union_author"], + image_id=unioned["union_image_id"], + search_image_id=unioned["union_search_image_id"], + content=unioned["union_content"], + author_page_id=unioned["union_author_page_id"], + is_black=unioned["union_is_black"], + thumb_image_id=unioned["union_thumb_image_id"], + ), + evaluated, + ) ) - ) - return mapped_to_real_values + if source is SharedArticleTypes.UNIWEB: + return list( + map( + lambda unioned: UniwebArticlePage( + id=unioned["union_id"], + page_ptr_id=unioned["union_page_ptr_id"], + perex=unioned["union_perex"], + date=unioned["union_date"], + author=unioned["union_author"], + image_id=unioned["union_image_id"], + search_image_id=unioned["union_search_image_id"], + content=unioned["union_content"], + ), + evaluated, + ) + ) + + if source is SharedArticleTypes.MAIN: + return list( + map( + lambda unioned: MainArticlePage( + id=unioned["union_id"], + page_ptr_id=unioned["union_page_ptr_id"], + perex=unioned["union_perex"], + date=unioned["union_date"], + author=unioned["union_author"], + image_id=unioned["union_image_id"], + search_image_id=unioned["union_search_image_id"], + content=unioned["union_content"], + author_page_id=unioned["union_author_page_id"], + region=unioned["union_author_page_id"], + article_type=unioned["union_article_type"], + is_black=unioned["union_is_black"], + thumb_image_id=unioned["union_thumb_image_id"], + ), + evaluated, + ) + ) def get_article_page_by_slug(self, slug: str): articles = self.append_all_shared_articles()