+ User.invited_with_orders_count field

This commit is contained in:
Phil Zhitnikov 2024-05-25 03:20:08 +04:00
parent 7fe327acd2
commit 466b45539d
2 changed files with 13 additions and 2 deletions

View File

@ -7,7 +7,7 @@ from django.contrib.auth.models import UserManager as _UserManager, AbstractUser
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.db import models 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 django.utils.translation import gettext_lazy as _
from phonenumber_field.modelfields import PhoneNumberField from phonenumber_field.modelfields import PhoneNumberField
from phonenumber_field.phonenumber import PhoneNumber from phonenumber_field.phonenumber import PhoneNumber
@ -173,6 +173,12 @@ class User(BonusProgramMixin, AbstractUser):
def invited_users(self): def invited_users(self):
return User.objects.filter(user_inviter__inviter=self.id) 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 @property
def inviter(self): def inviter(self):
return User.objects.filter(user_invited__invited=self.id).first() return User.objects.filter(user_invited__invited=self.id).first()

View File

@ -13,10 +13,15 @@ class UserSerializer(serializers.ModelSerializer):
name = serializers.CharField(source='first_name') name = serializers.CharField(source='first_name')
lastname = serializers.CharField(source='middle_name') lastname = serializers.CharField(source='middle_name')
surname = serializers.CharField(source='last_name') surname = serializers.CharField(source='last_name')
invited_with_orders_count = serializers.SerializerMethodField()
class Meta: class Meta:
model = User 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): class BonusProgramTransactionSerializer(serializers.ModelSerializer):