饼图的查询集

Query set for a pie-chart

我想我只是犯了一个简单的错误,但我似乎无法解决它。我正在尝试创建一些虚假数据并通过不同类型的用户进行分析,然后将其放入饼图中。这是我的 models.py:

from django.db import models

import factory
import factory.django
import factory.fuzzy
from datetime import datetime
from django.core.validators import MinValueValidator, MaxValueValidator
from faker import Faker
from faker.providers import BaseProvider
import random


class User(models.Model):
    name = models.CharField(max_length=64)
    address = models.CharField(max_length=128)
    phone_number = models.CharField(max_length=32)
    access_date = models.DateTimeField(default=datetime.now(), blank=True)
    session_duration = models.IntegerField(default = 0, validators=[MinValueValidator(0),
                               MaxValueValidator(5)])
    traffic_source = models.CharField(max_length=32)
    created_account = models.BooleanField(default=True)
    paid_customer = models.BooleanField(default=True)
    user_type = models.CharField(max_length=128, default = 'all_others')


class UserFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = User

    name = factory.Faker('name')
    address = factory.Faker('address')
    phone_number = factory.Faker('phone_number')
    access_date = factory.Faker('date')
    session_duration = factory.Faker('random_int')
    traffic_source = factory.fuzzy.FuzzyChoice(['Google', 'Facebook'])
    created_account = factory.Faker('pybool')
    paid_customer = factory.Faker('pybool')
    user_type = factory.fuzzy.FuzzyChoice(['registered', 'paid', 'all_others'])

还有我的views.py

from django.shortcuts import render

from django.db.models import Sum
from django.http import JsonResponse

from mysite.models import User


def home(request):
    return render(request, 'home.html')


def pie_chart(request):
    labels = [User.user_type]
    registered_user = User.objects.filter('registered')
    paid_user = User.objects.count('paid')
    all_others = User.objects.count('all_others')
    data = [registered_user, paid_user, all_others]

    #queryset = User.objects.order_by('-access_date')
    #for user in queryset:
        #labels.append(user.user_type)
        #data.append(user.user_count)

    return render(request, 'pie_chart.html', {
        'labels': labels,
        'data': data,
    })

我刚刚开始使用查询集,因此非常感谢您的帮助。

编辑:这是我收到的错误消息:

回溯(最后一次调用): 文件“/Users/ryan/anaconda3/lib/python3.7/site-packages/django/core/handlers/exception.py”,第 34 行,在内部 响应 = get_response(请求) 文件“/Users/ryan/anaconda3/lib/python3.7/site-packages/django/core/handlers/base.py”,第 115 行,在 _get_response 响应 = self.process_exception_by_middleware(e, 请求) 文件“/Users/ryan/anaconda3/lib/python3.7/site-packages/django/core/handlers/base.py”,第 113 行,在 _get_response 响应 = wrapped_callback(请求, *callback_args, **callback_kwargs) 文件“/Users/ryan/All_Django/FinalProject/mysite/views.py”,第 15 行,在 pie_chart 中 registered_user = User.objects.filter('registered') 文件“/Users/ryan/anaconda3/lib/python3.7/site-packages/django/db/models/manager.py”,第 82 行,在 manager_method 中 return getattr(self.get_queryset(), 名称)(*args, **kwargs) 文件“/Users/ryan/anaconda3/lib/python3.7/site-packages/django/db/models/query.py”,第 904 行,在过滤器中 return self._filter_or_exclude(假,*args,**kwargs) 文件“/Users/ryan/anaconda3/lib/python3.7/site-packages/django/db/models/query.py”,第 923 行,在 _filter_or_exclude 中 clone.query.add_q(Q(*args, **kwargs)) 文件“/Users/ryan/anaconda3/lib/python3.7/site-packages/django/db/models/sql/query.py”,第 1350 行,在 add_q 中 子句,_ = self._add_q(q_object, self.used_aliases) 文件“/Users/ryan/anaconda3/lib/python3.7/site-packages/django/db/models/sql/query.py”,第 1381 行,在 _add_q check_filterable=check_filterable, 文件“/Users/ryan/anaconda3/lib/python3.7/site-packages/django/db/models/sql/query.py”,第 1247 行,在 build_filter 中 参数,值 = filter_expr

异常类型:/mysite/pie-chart/ 处的 ValueError 异常值:要解压的值太多(预期为 2)

感谢大家的投入。我能够通过对我的 views.py 进行以下更改来解决它。欢迎留下更多评论,但我现在将其关闭。

from django.shortcuts import render

from django.db.models import Sum
from django.http import JsonResponse

from mysite.models import User


def home(request):
    return render(request, 'home.html')


def pie_chart(request):

    queryset = User.objects.order_by('-access_date')

    total_registered = 0
    total_paid = 0
    total_others = 0

    labels = ['total_registered', 'total_paid', 'total_others']

    for user in queryset:

        if user.created_account == 1:
            total_registered = total_registered + 1

        elif user.paid_customer == 1:
            total_paid = total_paid + 1

        elif user.created_account == 0 and user.paid_customer == 0:
            total_others = total_others + 1


    data = [total_registered, total_paid, total_others]

    return render(request, 'pie_chart.html', {
        'labels': labels,
        'data': data,
    })