【发布时间】: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