【问题标题】:How to count a number of users in a particular event如何计算特定事件中的用户数量
【发布时间】:2022-12-18 09:01:07
【问题描述】:

我正在尝试计算事件名称字段中的用户数。但是我在 django-rest-framework 过滤中遇到了问题。

我尝试了不同的逻辑,但我无法计算。当我在我的views.py 文件中对事件名称进行硬编码时,我得到了计数,但我不想在视图中对其进行硬编码。我可以从 url 或逻辑中提取事件名称,它可以简单地获取事件名称并给我其中的用户数。

这是我的models.py

from django.db import models

# Create your models here.

class FormDetails(models.Model):
    event_name = models.CharField(max_length=100)
    page_index = models.CharField(max_length = 10)
    device_choices = (
         ('mobile','mobile'),
         ('PC','PC'),
         ('tablet','tablet'),
    )
    device = models.CharField(choices=device_choices,max_length=15)
    metadata = models.TextField()
    session_data = models.TextField()
    ip_address = models.CharField(max_length = 30, null=True,blank=True)
    time = models.DateTimeField(auto_now_add=True)
    user_unique_identifier = models.BigIntegerField()
    status_choice = ( 
        ('complete','complete'),
    )
    status = models.CharField(max_length=20,null=True,blank=True, choices=status_choice)
    page_name = models.CharField(max_length=50, null=True,blank=True)
    button_name = models.CharField(max_length=20,null=True,blank=True)

这是我的serializers.py

from rest_framework import serializers
from .models import FormDetails

class FormSerializer(serializers.Serializer):
    class Meta(object):
        model = FormDetails
    
    fields = ['event_name','page_index','device','metadata','session_data','ip_address','time','user_unique_identifier','status','page_name','button_name']

    def get_accounts_items(self, obj):
        total_count = FormDetails.objects.filter(
        user_unique_identifier=obj.id)
        serializer = FormSerializer(total_count, many=True)
        return serializer.data

这是我的views.py

from django.shortcuts import render
from .models import FormDetails
from .serializers import FormSerializer
from rest_framework import viewsets
from rest_framework.response import Response
from rest_framework.renderers import JSONRenderer
from rest_framework.permissions import AllowAny
from rest_framework.decorators import action
from rest_framework.response import Response
  
class FormViewSet(viewsets.ModelViewSet):
    http_method_names = ['get','post', 'patch', 'head', 'options', 'put', 'delete']
    queryset = FormDetails.objects.all()
    serializer_class = FormSerializer
    permission_classes = [AllowAny]
    filter_backends = [django_filters.rest_framework.DjangoFilterBackend]
 
    @action(detail=False)
    def ipcount(self, request):
        count = FormDetails.objects.exclude(ip_address=None).count()
        content = {
            'ip_count': count
        }
        return Response(content)  

    @action(detail=False)
    def devicecount(self, request):
        count = FormDetails.objects.exclude(device=None).count()
        content = {
            'device_count': count
        }
        return Response(content)
 
    @action(detail=False)
    def pagecount(self, request):
        count = FormDetails.objects.exclude(page_index=None).count()
        content = {
            'page_index_count': count
        }
        return Response(content)

    @action(detail=False)
    def successform(self, request):
        count = FormDetails.objects.filter(status=None).count()
        content = {
            'successfully_filled_count': count
        }
        return Response(content)
 
    @action(detail=False)
    def unsuccessform(self, request):
        count = FormDetails.objects.exclude(status=None).count()
        content = {
            'unsuccessfully_filled_count': count
        }
        return Response(content)

    # @action(detail=False)
    def userbyevent(self, request):
        queryset = super().get_queryset()
        event = self.request.query_params.get('event_name')
        if event == None:
            pass
 
    # @action(detail=False)
    def userbyeyeevent(self, request):
        count = FormDetails.objects.filter(event_name='Eye Care').count()
        content = {
            # 'Eye users are': count
        }
        return Response(content)
  
    # @action(detail=False)
    def userbyhealthevent(self, request): 
        count = FormDetails.objects.filter(event_name='Health Checkup').count()
        content = {
            # 'Health users are': count
        }
        return Response(content)

    # @action(detail=False)
    def userbydentalevent(self, request): 
        count = FormDetails.objects.filter(event_name='Dental Care').count()
        content = {
            # 'Dental users are': count
        }
        return Response(content)

【问题讨论】:

  • 请阐明您的具体问题或提供更多详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: python django-rest-framework django-views django-rest-viewsets django-rest-framework-filters


【解决方案1】:

从 rest_framework 导入序列化程序 从 .models 导入 FormDetails

类 FormSerializer(序列化器。Serializer): 元类(对象): 型号 = 表格详情

fields = ['event_name','page_index','device','metadata','session_data','ip_address','time','user_unique_identifier','status','page_name','button_name']

def get_accounts_items(self, obj):
    total_count = FormDetails.objects.filter(
    user_unique_identifier=obj.id)
    serializer = FormSerializer(total_count, many=True)
    return serializer.data

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-21
    • 2020-07-27
    • 2023-03-23
    • 2021-02-25
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    相关资源
    最近更新 更多