Как посчитать количество экземпляров сеанса пользователем - PullRequest
0 голосов
/ 12 марта 2020

Моя модель

Предположим, я создал пользователя с именем "Ашу", а этот пользователь "Ашу" создал несколько сеансов, теперь я хочу напечатать количество экземпляров сеанса пользователем "Ашу".

class MyUser(AbstractBaseUser):

    email = models.EmailField(
        verbose_name='email address',
        max_length=255,
        unique=True)
    user_name=models.CharField(max_length=10,blank=True,null=True,unique=True)
    date_of_birth=models.DateField(null=True,blank=True) 
    mobile_number=models.CharField(max_length=20,blank=True,null=True)
    address=models.CharField(max_length=100,blank=True,null=True)
    country=models.CharField(max_length=20,blank=True,null=True)
    joining_date=models.DateField(null=True,blank=True)

    Rating_CHOICES = (
        (1, 'Poor'),
        (2, 'Average'),
        (3, 'Good'),
        (4, 'Very Good'),
        (5, 'Excellent')
    )
    Rating=models.IntegerField(choices=Rating_CHOICES,default=1)

    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)

    objects = MyUserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['date_of_birth']

    def __str__(self):
        return str(self.user_name)

    def has_perm(self, perm, obj=None):
        return True

    def has_module_perms(self, app_label):
        return True

    @property
    def is_staff(self):
        return self.is_admin
class Session(models.Model):

    Host=models.ForeignKey(MyUser,on_delete=models.CASCADE)
    game=( 
        ('cricket','cricket'),
        ('football','football'),
        ('basketball','basketball'),
        ('hockey','hockey'),
        ('gym','gym'),
        ('baseball','baseball'),
    )

    Sport=models.CharField(max_length=20,choices=game)   
    SPORT=(
        ('Indoor','Indoor'),
        ('Outdoor','Outdoor'),
    )
    Sports_category=models.CharField(max_length=10,choices=SPORT)
    SESSIONS=(
        ('General','General'),
        ('Business','Business'),
    )
    Session_category=models.CharField(max_length=15,choices=SESSIONS)
    TYPE=(
        ('Paid','Paid'),
        ('Free','Free'),
    )
    Session_type=models.CharField(max_length=10,choices=TYPE)
    Created=models.DateField(null=True,blank=True)
    Session_Date=models.DateField(null=True,blank=True)
    Location=models.ForeignKey(MyUser,related_name='street',on_delete=models.CASCADE)
    Player=models.CharField(max_length=100,blank=False)
    Start_time=models.TimeField(auto_now=False, auto_now_add=False)
    End_time=models.TimeField(auto_now=False, auto_now_add=False)
    Duration=models.CharField(max_length=30,blank=False)
    status=(
        ('1','Active'),
        ('2','UnActive'),

    )
    Status=models.CharField(max_length=20,choices=status)
    Equipment=models.TextField()
    Duration=models.CharField(max_length=20,blank=False)
    Level=models.ForeignKey(IntrestedIn,blank=True,on_delete=models.CASCADE)
    GENDER=(
        ('Male','Male'),
        ('Female','Female'),
        ('Male and Female','Male and Female'),
        ('Other','Other'),   
    )
    Gender=models.CharField(max_length=20,choices=GENDER    ,blank=True)
    Fee=models.CharField(max_length=50,blank=True,default='0')

    def __str__(self):
        return str(self.Host)

МОЙ ПРОСМОТР

class UserViewSet(viewsets.ViewSet):

    def create(self,request):
        try:
            user_name=request.data.get('user_name')
            mobile_number=request.data.get('mobile_number')
            address=request.data.get('address')
            country=request.data.get('country')
            joining_date=request.data.get('joining_date')
            if not all([user_name,mobile_number,address,country,joining_date]):
                raise Exception('All fields are mandatory')
            user=MyUser()
            user.user_name=user_name
            user.mobile_number=mobile_number
            user.address=address
            user.country=country
            user.joining_date=joining_date
            user.save()
            return Response({"response":'delivered'})
        except Exception as error:
            traceback.print_exc()
            return Response({"message": str(error), "success": False}, status=status.HTTP_200_OK)

class SessionViewSet(viewsets.ViewSet):

    def create(self, request):
        try:

            Host= request.data.get('Host')
            Sport = request.data.get('Sport')
            Sports_category = request.data.get('sports_category')
            #Location = request.data.get('Location')
            Session_category = data.get('session_category')
            Session_type=data.get('session_type ')
            Created=data.get('Created')
            Session_Date=data.get('Session_Date')
            Location=request.data.get('Location')
            Start_time=request.data.get('Start_time')
            End_time=request.data.get('End_time')
            Duration=request.data.get('Duration')
            Level=request.data.get('Level')
            Player=request.data.get('Player')
            Gender=request.data.get('Gender')
            Fee=request.data.get('Fee')
            Equipment=request.data.get('Equipment')
            new=Session()

            new.Host=MyUser.objects.get(user_name=Host)
            new.Sport=Sport
            new.Sports_category=sports_category
            new.Session_category=session_category
            new.Session_type=session_type
            new.Created=Created
            new.Session_Date=Session_Date
            new.Location=MyUser.objects.get(address=Location)
            new.Start_time=Start_time
            new.End_time=End_time
            new.Duration=Duration
            new.Level=IntrestedIn.objects.get(Level=Level)
            new.Player=Player
            new.Equipment=Equipment
            new.save()
            return Response({'Submitted Successfully':True})
        except Exception as error:
            return Response({"message": str(error), "success": False},
             status=status.HTTP_200_OK)

    def list(self, request):
        try:
            search = request.GET.get('search')
            sport=request.GET.get('sport')
            if search:
                users = Session.objects.filter(Host__user_name=search)
                page = request.GET.get('page')
                paginator = Paginator(users,1)
                try:
                    user = paginator.page(page)
                except PageNotAnInteger:
                    user = paginator.page(1)
                except EmptyPage:
                    user = paginator.page(paginator.num_pages)
                use = []

                for user in users:
                    use.append({
                        'Host':user.Host.user_name,
                        'Sport':user.Sport,
                        'Sports_category':user.Sports_category,
                        'Session_category':user.Session_category,
                        'Session_type':user.Session_type,
                        'Created':user.Created,
                        'Session_Date':user.Session_Date


                        })
                return Response({'output':use})
            if sport:
                users = Session.objects.filter(Sport=sport)
                page = request.GET.get('page')
                paginator = Paginator(users,1)
                try:
                    user = paginator.page(page)
                except PageNotAnInteger:
                    user = paginator.page(1)
                except EmptyPage:
                    user = paginator.page(paginator.num_pages)
                use = []

                for user in users:
                    use.append({
                        'Host':user.Host.user_name,
                        'Sport':user.Sport,
                        #'Sports_category':user.Sports_category,
                        #'Session_category':user.Session_category,
                        #'Session_type':user.Session_type,
                        #'Created':user.Created,
                        #'Session_Date':user.Session_Date


                        })
                return Response({'out':use})

            else :
                users = Session.objects.all()
                page = request.GET.get('page')
                paginator = Paginator(users,1)
                try:
                    user = paginator.page(page)
                except PageNotAnInteger:
                    user = paginator.page(1)
                except EmptyPage:
                    user = paginator.page(paginator.num_pages)
                use = []

                for user in users:
                    use.append({
                       'Host':user.Host.user_name,
                       'Sport':user.Sport,
                       'Sports_category':user.Sports_category,
                       'Session_category':user.Session_category,
                       'Session_type':user.Session_type,
                       'Created':user.Created,
                       'Session_Date':user.Session_Date

                        })
            return Response({"success":True, "users":use, "pages":paginator.num_pages})

        except Exception as error:
            traceback.print_exc()
            return Response({"message": str(error), "success": False}, status=status.HTTP_200_OK)

1 Ответ

1 голос
/ 12 марта 2020

Session имеет от ForeignKey до MyUser через Host, поэтому вы можете сделать следующее:

my_user = MyUser.objects.get(...)

my_user.session_set.count()  # gives the number of related Session-instances

Также см. Документы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...