Я использую Django с API Google Chart. Мне нужно построить массив JavaScript, чтобы отобразить гистограмму, показывающую # объектов, созданных в данный день.Получить массив JavaScript из представления Django
ожидается массив печатается в шаблоне должен выглядеть следующим образом:
...
function drawStuff() {
var data = new google.visualization.arrayToDataTable([
['Date', '# of records'],
['2015-03-07', 3], // Expected format: ['Date', # of objects]
['2015-03-08', 8],
]);
...
views.py:
class LogsView(TemplateView):
template_name = 'logs.html'
def ValuesQuerySetToDict(self, vqs):
return [ [item['date_created'], item['created_count'] ] for item in vqs]
def render_chart_data(self, **kwargs):
queryset = LogEntry.objects.filter(user=self.request.user).extra(
{'date_created': 'date(created)'}
).values('date_created').annotate(created_count=Count('id'))
modified_dict = self.ValuesQuerySetToDict(queryset)
return json.dumps(modified_dict)
def get_context_data(self, **kwargs):
context = super(
LogsView, self
).get_context_data(**kwargs)
context['chart_data'] = self.render_chart_data()
визуализируется в шаблон Джанго следующее (я обошел отправьте его на JavaScript, чтобы посмотреть, что было возвращено.
Когда я считаю, что я должен вернуть массив JavaScript, как следующее:
["2015-02-18", 3],
["2015-02-19", 12],
["2015-02-21", 1],
И кормить, что функции drawStuff, которая будет воспроизводить BarChart.
Альтернативный метод
Я следовал this thread на StackOverflow и модифицировал render_chart_data использовать Джанго сериалайзер like this, но я получаю сообщение об ошибке: "„ДИКТ“объект не имеет атрибута„_meta“
Вы уверены, что 'queryset',' convert' или 'json_data' содержит ваши ожидаемые значения? – Joseph
@JosephtheDreamer - Я обновил и теперь подтверждаю, что данные запроса запрашиваются через представление Django. –
Как насчет 'modified_dict'? Можете ли вы обновить сообщение со значениями, чтобы мы могли проверить, действительно ли 'json.dumps' предоставлены правильные значения? – Joseph