news in_favs nested fix
This commit is contained in:
parent
277fe8d17e
commit
71dd52c194
|
|
@ -95,12 +95,14 @@ class NewsQuerySet(TranslationQuerysetMixin):
|
||||||
|
|
||||||
# todo: filter by best score
|
# todo: filter by best score
|
||||||
# todo: filter by country?
|
# todo: filter by country?
|
||||||
def should_read(self, news):
|
def should_read(self, news, user):
|
||||||
return self.model.objects.exclude(pk=news.pk).published(). \
|
return self.model.objects.exclude(pk=news.pk).published(). \
|
||||||
|
annotate_in_favorites(user). \
|
||||||
with_base_related().by_type(news.news_type).distinct().order_by('?')
|
with_base_related().by_type(news.news_type).distinct().order_by('?')
|
||||||
|
|
||||||
def same_theme(self, news):
|
def same_theme(self, news, user):
|
||||||
return self.model.objects.exclude(pk=news.pk).published(). \
|
return self.model.objects.exclude(pk=news.pk).published(). \
|
||||||
|
annotate_in_favorites(user). \
|
||||||
with_base_related().by_type(news.news_type). \
|
with_base_related().by_type(news.news_type). \
|
||||||
by_tags(news.tags.all()).distinct().order_by('-start')
|
by_tags(news.tags.all()).distinct().order_by('-start')
|
||||||
|
|
||||||
|
|
@ -212,13 +214,11 @@ class News(BaseAttributes, TranslatedFieldsMixin):
|
||||||
def web_url(self):
|
def web_url(self):
|
||||||
return reverse('web:news:rud', kwargs={'slug': self.slug})
|
return reverse('web:news:rud', kwargs={'slug': self.slug})
|
||||||
|
|
||||||
@property
|
def should_read(self, user):
|
||||||
def should_read(self):
|
return self.__class__.objects.should_read(self, user)[:3]
|
||||||
return self.__class__.objects.should_read(self)[:3]
|
|
||||||
|
|
||||||
@property
|
def same_theme(self, user):
|
||||||
def same_theme(self):
|
return self.__class__.objects.same_theme(self, user)[:3]
|
||||||
return self.__class__.objects.same_theme(self)[:3]
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def main_image(self):
|
def main_image(self):
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
"""News app common serializers."""
|
"""News app common serializers."""
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
from rest_framework.fields import SerializerMethodField
|
||||||
|
|
||||||
from account.serializers.common import UserBaseSerializer
|
from account.serializers.common import UserBaseSerializer
|
||||||
from gallery.models import Image
|
from gallery.models import Image
|
||||||
|
|
@ -151,7 +152,7 @@ class NewsBaseSerializer(ProjectModelSerializer):
|
||||||
'tags',
|
'tags',
|
||||||
'slug',
|
'slug',
|
||||||
'in_favorites',
|
'in_favorites',
|
||||||
'view_counter'
|
'view_counter',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -208,8 +209,8 @@ class NewsDetailSerializer(NewsBaseSerializer):
|
||||||
class NewsDetailWebSerializer(NewsDetailSerializer):
|
class NewsDetailWebSerializer(NewsDetailSerializer):
|
||||||
"""News detail serializer for web users.."""
|
"""News detail serializer for web users.."""
|
||||||
|
|
||||||
same_theme = NewsSimilarListSerializer(many=True, read_only=True)
|
same_theme = SerializerMethodField()
|
||||||
should_read = NewsSimilarListSerializer(many=True, read_only=True)
|
should_read = SerializerMethodField()
|
||||||
agenda = AgendaSerializer()
|
agenda = AgendaSerializer()
|
||||||
banner = NewsBannerSerializer()
|
banner = NewsBannerSerializer()
|
||||||
|
|
||||||
|
|
@ -223,6 +224,12 @@ class NewsDetailWebSerializer(NewsDetailSerializer):
|
||||||
'banner',
|
'banner',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def get_same_theme(self, obj):
|
||||||
|
return NewsSimilarListSerializer(obj.same_theme(self.context['request'].user), many=True, read_only=True).data
|
||||||
|
|
||||||
|
def get_should_read(self, obj):
|
||||||
|
return NewsSimilarListSerializer(obj.should_read(self.context['request'].user), many=True, read_only=True).data
|
||||||
|
|
||||||
|
|
||||||
class NewsBackOfficeBaseSerializer(NewsBaseSerializer):
|
class NewsBackOfficeBaseSerializer(NewsBaseSerializer):
|
||||||
"""News back office base serializer."""
|
"""News back office base serializer."""
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
|
|
||||||
|
from django.db.models import Count
|
||||||
|
|
||||||
from transfer.models import EmailAddresses, NewsletterSubscriber
|
from transfer.models import EmailAddresses, NewsletterSubscriber
|
||||||
from transfer.serializers.notification import SubscriberSerializer, NewsletterSubscriberSerializer
|
from transfer.serializers.notification import SubscriberSerializer, NewsletterSubscriberSerializer
|
||||||
|
|
||||||
|
|
@ -25,12 +27,12 @@ def transfer_newsletter_subscriber():
|
||||||
'email_address__locale',
|
'email_address__locale',
|
||||||
'created_at',
|
'created_at',
|
||||||
)
|
)
|
||||||
|
|
||||||
serialized_data = NewsletterSubscriberSerializer(data=list(queryset.values()), many=True)
|
# serialized_data = NewsletterSubscriberSerializer(data=list(queryset.values()), many=True)
|
||||||
if serialized_data.is_valid():
|
# if serialized_data.is_valid():
|
||||||
serialized_data.save()
|
# serialized_data.save()
|
||||||
else:
|
# else:
|
||||||
pprint(f'NewsletterSubscriber serializer errors: {serialized_data.errors}')
|
# pprint(f'NewsletterSubscriber serializer errors: {serialized_data.errors}')
|
||||||
|
|
||||||
|
|
||||||
data_types = {
|
data_types = {
|
||||||
|
|
|
||||||
|
|
@ -1201,4 +1201,4 @@ class NewsletterSubscriber(MigrateMixin):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
managed = False
|
managed = False
|
||||||
db_table = 'newsletter_subscriber'
|
db_table = 'newsletter_subscriptions'
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
|
from account.models import User
|
||||||
from notification.models import Subscriber
|
from notification.models import Subscriber
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -44,36 +46,33 @@ class NewsletterSubscriberSerializer(serializers.Serializer):
|
||||||
email_address__locale = serializers.CharField(allow_null=True)
|
email_address__locale = serializers.CharField(allow_null=True)
|
||||||
created_at = serializers.DateTimeField(format='%m-%d-%Y %H:%M:%S')
|
created_at = serializers.DateTimeField(format='%m-%d-%Y %H:%M:%S')
|
||||||
|
|
||||||
# def validate(self, data):
|
def validate(self, data):
|
||||||
# data.update({
|
data.update({
|
||||||
# 'reviewer': self.get_reviewer(data),
|
'old_id': data.pop('id'),
|
||||||
# 'status': Review.READY if data['aasm_state'] == 'published' else Review.TO_INVESTIGATE,
|
'email': data.pop('email_address__email'),
|
||||||
# 'published_at': data.pop('created_at'),
|
'ip_address': data.pop('email_address__ip'),
|
||||||
# 'old_id': data.pop('id'),
|
'country_code': data.pop('email_address__country_code'),
|
||||||
# 'content_object': self.get_establishment(data),
|
'locale': data.pop('email_address__locale'),
|
||||||
# })
|
'created': data.pop('created_at'),
|
||||||
# data.pop('reviewer_id')
|
'user_id': self.get_user(data),
|
||||||
# data.pop('establishment_id')
|
})
|
||||||
# data.pop('aasm_state')
|
data.pop('email_address__account_id')
|
||||||
# return data
|
return data
|
||||||
#
|
|
||||||
# def create(self, validated_data):
|
# def create(self, validated_data):
|
||||||
# obj, _ = Review.objects.update_or_create(
|
# obj, _ = Review.objects.update_or_create(
|
||||||
# old_id=validated_data['old_id'],
|
# old_id=validated_data['old_id'],
|
||||||
# defaults=validated_data,
|
# defaults=validated_data,
|
||||||
# )
|
# )
|
||||||
# return obj
|
# return obj
|
||||||
#
|
|
||||||
# @staticmethod
|
@staticmethod
|
||||||
# def get_reviewer(data):
|
def get_user(data):
|
||||||
# user = User.objects.filter(old_id=data['reviewer_id']).first()
|
|
||||||
# if not user:
|
if not data['email_address__account_id']:
|
||||||
# raise ValueError(f"User account not found with old_id {data['reviewer_id']}")
|
return None
|
||||||
# return user
|
|
||||||
#
|
user = User.objects.filter(old_id=data['email_address__account_id']).first()
|
||||||
# @staticmethod
|
if not user:
|
||||||
# def get_establishment(data):
|
raise ValueError(f"User account not found with old_id {data['email_address__account_id']}")
|
||||||
# establishment = Establishment.objects.filter(old_id=data['establishment_id']).first()
|
return user.id
|
||||||
# if not establishment:
|
|
||||||
# raise ValueError(f"Establishment not found with old_id {data['establishment_id']}: ")
|
|
||||||
# return establishment
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user