Набор запросов для диаграммы ap ie - PullRequest
0 голосов
/ 10 июля 2020

Я думаю, что делаю здесь простую ошибку, но не могу ее решить. Я пытаюсь создать поддельные данные и проанализировать их с помощью разных типов пользователей, которые затем помещаю в диаграмму ap ie. Вот мои модели 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,
    })

Я только начинаю работать с наборами запросов, поэтому любая помощь приветствуется.

Edit: это сообщение об ошибке, которое я получаю:

Traceback (последний вызов последним): File "/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 response = self.process_exception_by_middleware (e, request) File" /Users/ryan/anaconda3/lib/python3.7/site-packages/django/core/handlers/base.py ", строка 113, в _get_response response = wrapped_callback (request, * callback_args, ** callback_kwargs) Файл "/Users/ryan/All_Django/FinalProject/mysite/views.py", строка 15, в pie_chart registration_user = User.objects.filter (' зарегистрированный ') Файл "/Users/ryan/anaconda3/lib/python3.7/site-packages/django/db/models/manager.py", строка 82, в manager_met hod return getattr (self.get_queryset (), name) (* args, ** kwargs) Файл "/Users/ryan/anaconda3/lib/python3.7/site-packages/django/db/models/query.py ", строка 904, в фильтре return self._filter_or_exclude (False, * args, ** kwargs) File" /Users/ryan/anaconda3/lib/python3.7/site-packages/django/db/models/query. py ", строка 923, в _filter_or_exclude clone.query.add_q (Q (* args, ** kwargs)) File" /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) File" /Users/ryan/anaconda3/lib/python3.7/site-packages/django/ db / models / sql / query.py ", строка 1381, в _add_q check_filterable = check_filterable, File" /Users/ryan/anaconda3/lib/python3.7/site-packages/django/db/models/sql/query .py ", строка 1247, в build_filter arg, value = filter_expr

Тип исключения: ValueError at / mysite / p ie -chart / Exception Value: слишком много значений для распаковки (ожидается 2)

1 Ответ

0 голосов
/ 13 июля 2020

Спасибо за вклад. Я смог решить эту проблему с помощью следующих изменений в моем 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,
    })
...