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