Конвертировать query в Списке python

Я хочу конвертировать этот query Clientes.objects.values() в списке, чтобы позже использовать графики Chartkick, но со стоимостью, которую он возвращает мне.

Модель Clientes он:

class Clientes(models.Model):
    Nombre = models.CharField(max_length=50,null=False)
    medio = models.ForeignKey(Medio,null=True,blank=True)

    def __unicode__(self):
        return self.Nombre

И то, что я хочу, состоит в том, чтобы используя Chartkick он послал мне число людей в зависимости от поля medio, нужно упоминать о том, что средства динамические равно как число людей.

3
задан 28.03.2016, 19:12
3 ответа

Ну, чтобы начинаться ты можешь использовать простые поиски с django в твоей модели клиенты:

Clientes.objects.filter(medio='whatever').count()

Функция filterвыдай все объекты модели как búqueda, в котором ты нуждаешься, функцию count считай все объекты, найденные в вышеупомянутых поисках.

Для большей информации ты можешь использовать документацию: Просачиваться в Джанго

Итак, ты нуждаешься в том, чтобы использовать chartkick то, что ты хочешь, состоит в том, чтобы создавать словарь с именами каждого способа и одним число клиентов каждого способа, для этого ты можешь делать список или договоренность со всеми именами средств, или в Вашем недостатке, делать поиски, чтобы находить существующие средства в клиенте, и потом делать повторение, которое верит тебе в договоренность с именем вышеупомянутого способа и как стоимость поиски, которые я поместил тебе ранее, он может принадлежать проницательному siquiente:

var data = []
for medio in medios:
    data.append(medio, Clientes.objects.filter(medio=medio).count()))

Предполагая, что data это будет список данных, который использует книжный магазин, как он говорит в Вашей документации: [['Chrome', 52.9], ['Firefox', 27.7], [Он 'Действует', 1.6]]

Давайте верить в список средства, который будет считать объектами имя способа, и в повторении мы будем добавлять к готовой дате среднюю стоимость, полученную в средствах и числе объектов, у которых есть список средние.

В большие черты должен будь быть solición этого стиля. Последний шаг был бы пламенем список, произведенный с Джанго, но для этого ты можешь использовать будь готова в одном виде, основанном на классах как добавочный контекст.

Для этого мы можем видеть Пример Вида Списка в документации:

def get_context_data(self, **kwargs):
        context = super(ArticleListView, self).get_context_data(**kwargs)
        context['now'] = timezone.now()
        return context

К этой функции мы можем добавлять добавочный контент, который мы хотим, чтобы шаблон показал на экране:

def get_context_data(self, **kwargs):
        context = super(ArticleListView, self).get_context_data(**kwargs)
        var data = []
        for medio in medios:
            data.append(medio, Clientes.objects.filter(medio=medio).count()))
        context['data'] = data
        return context

С этим мы переместим изменчивую дату как контекст восходи в виде списка, или если ты хочешь, в подробном виде, и этого было бы достаточным.

3
ответ дан 24.11.2019, 14:41
  • 1
    Если это у меня остается ясным, уже у меня есть те каждого medio1=Clientes.objects.filter (я происхожу = и # 39; 1 и # 39;) .count () medio2=Clientes.objects.filter (я происхожу = и # 39; 2 и # 39;) .count () medio3=Clientes.objects.filter (я происхожу = и # 39; 3 и # 39;) .count () например точка - это как объединение этого в chartkick – Angel 28.03.2016, 19:10
  • 2
    Ах дружелюбный, совершенный, я буду помещать тебя ac и # 225; простой пример, из-за которого я не имею в руку django, но страховка может быть очень и #250; til. Одна спрашивает м и # 225; s, у средств есть имена или они s и # 243; это n и # 250; морские окуни? – SalahAdDin 28.03.2016, 19:14
  • 3
    Средства - различная модель и только у них есть имя – Angel 28.03.2016, 19:17
  • 4
    Ах и # 237; если он сложнее, я буду помещать тебе пример как быть должным и # 237; чтобы быть, и ночью я помогаю тебе м и # 225; s во всех деталях. – SalahAdDin 28.03.2016, 19:19
  • 5
    +1 - возможный soluci и # 243; n, habr и # 237; в который знать, повторно ли сокрушался я est и # 225; используя Совещания, Основанные на Классе (VBC) или на функциях (VBF) – César 28.03.2016, 20:05

Я понимаю, что то, что ты хочешь, является каким-то типом графика, в котором у тебя было бы количество клиентов из-за среднего. Если это случай тогда, то, что ты был бы должен делать, состоит в том, чтобы группировать их.

Чтобы группировать их, я думаю, что в этом случае самое простое состояло бы в том, чтобы начинаться с обратной, а именно, с модели Medio. Используя метод annotate и Count мы можем считать количество клиентов, у которого есть каждый способ:

>>> data = Medio.objects.annotate(total=Count('clientes')).values_list('nombre', 'total')
[('MEDIO1', 10), ('MEDIO2', 20), ('MEDIO3', 30)]

Имей в виду, что я использую values_list вместо values чтобы представлять результаты через tuplas. Я принимаю также, что твоя модель Medio у него есть поле nombre.

Согласно в документацию, которую я вижу в хранилище Chartkick, data смоги быть словарем или списком:

{'Chrome': 52.9, 'Opera': 1.6, 'Firefox': 27.7}

[['Chrome', 52.9], ['Firefox', 27.7], ['Opera', 1.6]]

Не, если Chartkick принял список tuplas, но лучше мы убеждаемся и обращаем ее в список списков:

>>> data = Medio.objects.annotate(total=Count('clientes')).values_list('nombre', 'total')
[('MEDIO1', 10), ('MEDIO2', 20), ('MEDIO3', 30)]
>>> data = [list(elem) for elem in data]
[['MEDIO1', 10], ['MEDIO2', 20], ['MEDIO3', 30]]

Я думаю, что с этим уже ты имеешь готовая data чтобы перемещать ее Chartkick.

1
ответ дан 24.11.2019, 14:41
  • 1
    Не conoc и # 237; в этот funci и # 243; n annotate, спасибо, как всегда. Лучший ответ, чем м и # 237; в: и #39; (этот дает мне идею: D – SalahAdDin 28.03.2016, 20:02
  • 2
    @SalahAdDin не, если лучше, но если различный. Все они d и # 237; эксперт мы изучаем что-то новое;-) – César 28.03.2016, 20:03
  • 3
    Ну, точка для моего ответа, по крайней мере, est и # 225; полностью написанная: и #39; ( – SalahAdDin 28.03.2016, 20:04
  • 4
    Большое спасибо Вашим временем он мне был сделан гораздо больше f и # 225; cil схвати и # 237; даже схвати и # 237; благодаря 2 @SalahAdDin, – Angel 28.03.2016, 20:44

Извините сейчас они просят у меня фильтр в даты, Я требую В День, В Месяце, 3 предыдущих Месяца и т.д., Проверяя документацию Chartkick вижу, что функционировал бы range, но как я могу включать это, в которое уже я имею

def charts(request):
data = Clasificacion.objects.annotate(total=Count('carros')).values_list('nombre','total',).order_by('-total')
data = [list(elem) for elem in data]
library = {
        "backgroundColor": "#FFF",
        "colors": ['#21333a','#76b5cd','#436775','#548192','#659bb0']
        }
template = 'templates/Usuarios/Reporte_Cliente.html'
return render(request, template, locals())      

и к моей модели клиенты я добавил соответствующее поле

timestamp = models.DateTimeField(auto_now=True,)
-1
ответ дан 24.11.2019, 14:41
  • 1
    Ты должен реализовывать другой отдельный вопрос для этого нового запроса – Javier Cárdenas 19.04.2016, 01:56