Простой цикл 'for loop' для поля datetime не работает в Django (google chart)
Я пытаюсь использовать google chart в моем Django проекте, google chart требует формат типа
['label1', 'label2', 'label3', new Date(Y, m, d), new Date(Y, m, d), null, 100, null], это
как список, поэтому я пытаюсь упростить задачу, я заменил только дату и оставил другие поля по умолчанию.
У меня есть модель в Django, которая имеет поле start_date и поле due date, так что единственное, что я делаю не так, это помещаю их в 2 'new Date' и в цикл for, почему-то коды не работают, я был бы очень признателен, если бы кто-нибудь мог взглянуть, будьте здоровы.
models.py
start_date = models.DateTimeField(default=datetime.datetime.now)
due_date = models.DateTimeField(default=datetime.datetime.now)
views.py
def visualisation(request, project_id):
project = Project.objects.get(id=project_id)
counts_data = Todo.objects.aggregate(
to_do_count=Count('id', filter=Q(status='to_do')),
in_progress_count=Count('id', filter=Q(status='in_progress')),
done_count=Count('id', filter=Q(status='done'))
)
todos = project.todo_set.order_by('-project_code')
return render(request, 'todo_lists/progress.html', {"counts_data":counts_data,'team':team,'todos':todos})
HTML
function drawChart() {
var data = new google.visualization.DataTable();
data.addColumn('string', 'Task ID');
data.addColumn('string', 'Task Name');
data.addColumn('string', 'Resource');
data.addColumn('date', 'Start Date');
data.addColumn('date', 'End Date');
data.addColumn('number', 'Duration');
data.addColumn('number', 'Percent Complete');
data.addColumn('string', 'Dependencies');
data.addRows([
{% for todo in todos %}
['Introduction', 'Introduction Project', 'Introduction',
new Date({{ todo.start_date|date:"Y,m,d"}}), new Date({{ todo.due_date|date:"Y,m,d"}}), null, 50, null],{% endfor %}
]);
var options = {
height: 400,
width: 1000,
gantt: {
trackHeight: 30
}
};
Вы смешиваете цикл for с типами данных, что может быть вашей проблемой. Я думаю, что вам лучше использовать что-то вроде этого:
{% for todo in todos %}
data.addRow(
['Introduction', 'Introduction Project', 'Introduction',
new Date({{ todo.start_date|date:"Y,m,d"}}), new Date({{ todo.due_date|date:"Y,m,d"}}), null, 50, null]
);
{% endfor %}
Я решил проблему, оказалось, что проблема в теге шаблона, первый столбец набора данных не может быть одинаковым, иначе будет выводиться одна строка, а так как у меня satrt_date и due_date, которые хранятся в базе данных одинаковые, то на графике ничего не отображалось. Я использовал следующий код в моем HTML:
HTML
'''
{% for todo in todos %}
['{{ todo.name }}', 'Introduction Project', 'Introduction',
new Date({{todo.start_date|date:"Y, m, d"}}), new Date({{todo.due_date|date:"Y, m, d"}}), null, 50, null]{% if not forloop.last %},{% endif %}
{% endfor %}
'''