From 466b45539dded6f99738d24f60b399f3daedb262 Mon Sep 17 00:00:00 2001 From: phzhik Date: Sat, 25 May 2024 03:20:08 +0400 Subject: [PATCH] + User.invited_with_orders_count field --- account/models/user.py | 8 +++++++- account/serializers.py | 7 ++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/account/models/user.py b/account/models/user.py index 2726cc5..3a7b30f 100644 --- a/account/models/user.py +++ b/account/models/user.py @@ -7,7 +7,7 @@ from django.contrib.auth.models import UserManager as _UserManager, AbstractUser from django.core.exceptions import ValidationError from django.db import models -from django.db.models import Q +from django.db.models import Q, Count from django.utils.translation import gettext_lazy as _ from phonenumber_field.modelfields import PhoneNumberField from phonenumber_field.phonenumber import PhoneNumber @@ -173,6 +173,12 @@ class User(BonusProgramMixin, AbstractUser): def invited_users(self): return User.objects.filter(user_inviter__inviter=self.id) + @property + def invited_users_with_orders(self): + return (self.invited_users + .annotate(_orders_count=Count('customer_orders')) + .filter(_orders_count__gt=0)) + @property def inviter(self): return User.objects.filter(user_invited__invited=self.id).first() diff --git a/account/serializers.py b/account/serializers.py index 919ee9f..327fb01 100644 --- a/account/serializers.py +++ b/account/serializers.py @@ -13,10 +13,15 @@ class UserSerializer(serializers.ModelSerializer): name = serializers.CharField(source='first_name') lastname = serializers.CharField(source='middle_name') surname = serializers.CharField(source='last_name') + invited_with_orders_count = serializers.SerializerMethodField() class Meta: model = User - fields = ('id', 'email', 'phone', 'role', 'name', 'lastname', 'surname', 'balance', 'referral_code', 'is_draft_user') + fields = ('id', 'email', 'phone', 'role', 'name', 'lastname', 'surname', + 'balance', 'referral_code', 'is_draft_user', 'invited_with_orders_count') + + def get_invited_with_orders_count(self, obj): + return obj.invited_users_with_orders.count() class BonusProgramTransactionSerializer(serializers.ModelSerializer):