From 9608fdb92a45bfdced27d48f1919e14c069e49cb Mon Sep 17 00:00:00 2001 From: michail Date: Fri, 27 Sep 2019 11:30:58 +0500 Subject: [PATCH 1/3] property was added to news model --- apps/news/models.py | 19 +++++++++++++++++++ apps/news/serializers.py | 1 + 2 files changed, 20 insertions(+) diff --git a/apps/news/models.py b/apps/news/models.py index 140c89c9..75deee56 100644 --- a/apps/news/models.py +++ b/apps/news/models.py @@ -5,6 +5,7 @@ from django.utils import timezone from django.utils.translation import gettext_lazy as _ from rest_framework.reverse import reverse from utils.models import BaseAttributes, TJSONField, TranslatedFieldsMixin +from django.contrib.contenttypes.models import ContentType class NewsType(models.Model): @@ -100,3 +101,21 @@ class News(BaseAttributes, TranslatedFieldsMixin): @property def web_url(self): return reverse('web:news:rud', kwargs={'slug': self.slug}) + + @property + def list_also_like_news(self): + # news_content_type = ContentType.objects.get(app_label="news", model="news") + + # tg_name = self.tags.filter(metadata__content_type=news_content_type) + + # print(tg_name) + + # tag_id = self.tags.all() + # + like_news = News.objects.filter(is_publish=True, news_type=self.news_type, tags__id=self.tags__id) + # + # print("LINE 112", like_news) + + news_list = [self.description, "extra", "field", "test", self.slug] + + return news_list diff --git a/apps/news/serializers.py b/apps/news/serializers.py index dbcd0f62..981ddae0 100644 --- a/apps/news/serializers.py +++ b/apps/news/serializers.py @@ -64,6 +64,7 @@ class NewsDetailSerializer(NewsBaseSerializer): 'is_publish', 'author', 'country', + 'list_also_like_news', ) From 962dc2f480b7c1e79808fbe4e0fc48c6d90c80b8 Mon Sep 17 00:00:00 2001 From: michail Date: Fri, 27 Sep 2019 12:01:30 +0500 Subject: [PATCH 2/3] maybe it is solution --- apps/news/models.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/news/models.py b/apps/news/models.py index 75deee56..1b9023db 100644 --- a/apps/news/models.py +++ b/apps/news/models.py @@ -111,11 +111,16 @@ class News(BaseAttributes, TranslatedFieldsMixin): # print(tg_name) # tag_id = self.tags.all() + news_content_type = ContentType.objects.get(app_label="news", model="news") # - like_news = News.objects.filter(is_publish=True, news_type=self.news_type, tags__id=self.tags__id) + like_news = News.objects.filter(is_publish=True, news_type=self.news_type, + tags__content_type=news_content_type) + # # print("LINE 112", like_news) - news_list = [self.description, "extra", "field", "test", self.slug] + # news_list = [self.description, "extra", "field", "test", self.slug] + + news_list = [{"id": n.id, "slug": n.slug} for n in like_news] return news_list From 755490c6cf92dc170934bd0126ccbbbe96fdee1a Mon Sep 17 00:00:00 2001 From: michail Date: Fri, 27 Sep 2019 17:12:24 +0500 Subject: [PATCH 3/3] done --- apps/news/models.py | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/apps/news/models.py b/apps/news/models.py index 1b9023db..cfb10d39 100644 --- a/apps/news/models.py +++ b/apps/news/models.py @@ -5,7 +5,7 @@ from django.utils import timezone from django.utils.translation import gettext_lazy as _ from rest_framework.reverse import reverse from utils.models import BaseAttributes, TJSONField, TranslatedFieldsMixin -from django.contrib.contenttypes.models import ContentType +from random import sample as random_sample class NewsType(models.Model): @@ -104,23 +104,18 @@ class News(BaseAttributes, TranslatedFieldsMixin): @property def list_also_like_news(self): - # news_content_type = ContentType.objects.get(app_label="news", model="news") - # tg_name = self.tags.filter(metadata__content_type=news_content_type) + # without "distinct" method the doubles are arising + like_news = News.objects.published().filter(news_type=self.news_type, tags__in=models.F("tags"))\ + .exclude(id=self.id).distinct() - # print(tg_name) + news_count = like_news.count() - # tag_id = self.tags.all() - news_content_type = ContentType.objects.get(app_label="news", model="news") - # - like_news = News.objects.filter(is_publish=True, news_type=self.news_type, - tags__content_type=news_content_type) + if news_count >= 6: + random_ids = random_sample(range(news_count), 6) + else: + random_ids = random_sample(range(news_count), news_count) - # - # print("LINE 112", like_news) - - # news_list = [self.description, "extra", "field", "test", self.slug] - - news_list = [{"id": n.id, "slug": n.slug} for n in like_news] + news_list = [{"id": like_news[r].id, "slug": like_news[r].slug} for r in random_ids] return news_list