我正在进行基本的Django民意调查教程,并将民意调查结果放入Kendo图表中。我目前有一个条形图,圆环图和气泡图,显示所选民意调查问题的结果。我想添加一个折线图,但不仅仅使用所选投票的结果,还要包含其他问题的数据。有没有办法做到这一点,因为我无法找到答案。我已将我当前的代码放在下面。
# Javascript in results.html
$("#chart4").kendoChart({
legend: {
position: "bottom"
},
seriesDefaults: {
type: "line"
},
series: [
# Don't know what to do here
{
name: ?
data: ?
}
],
valueAxis: {
labels: {
format: "{0}%"
}
},
categoryAxis: {
categories: [{% for answer in question.answer_set.all %}"{{answer.choice_text}}", {% endfor %}]
}
});
views.py
class ResultsView(generic.DetailView):
model = Question
template_name = 'polls/results.html'
context_object_name = 'latest_question_list'
def get_queryset(self):
"""Return the last five published questions."""
return Question.objects.order_by('id')
models.py
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('Date Published')
def __str__(self):
return self.question_text
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
class Answer(models.Model):
question = models.ForeignKey(Question)
choice_position = models.IntegerField(default=0)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
def __str__(self):
return self.choice_text
答案 0 :(得分:1)
最简单的方法是通过Ajax查询Django。您必须定义一个返回某些数据的视图(最好是json),然后从您的js脚本中调用它。
from django.core import serializers
from django.http import HttpResponse
def all_questions(request):
"""
Most of the time you will have to do some extra work formating the json in
order to match the format that the JS library is expecting.
I can see your graph is expecting something like:
series: [{
name: <some_sustom_name>
data: <array of values>
}
],
So you need to provide to the JS library the data it is expecting.
That means some array (or perhaps similar data structure).
"""
questions = Questions.objects.all()
response = serializers.serialize('json', questions)
# Now response contain a representation of a
# json object that has a property called data
# besides, that property contain a list of Django objects.
response = "{data: %s}" % response
return HttpResponse(response, content_type="application/json")
有关response
内容的详细信息,请参阅:Serializing Django Objects
现在,假设您在javascript中获得了数据(Ajax调用是成功的),您将拥有类似的内容:
{data: [list of serialized Django objects]}
您只需处理上面的列表并提取图表的数据。当然,您可以直接从Django视图获取该列表。那是你的电话。
有关在series
部分图表中添加内容的详细信息,请参阅此Kendo demo。
从JQuery通过Ajax查询Django 。
为此你需要这样的代码:
$.ajax({
type: "GET", // 1
url:"url_to/you_view", // 2
data: { // 3
'zip': zip,
},
success: function(data){ // 4
},
error: function(error){ // 5
alert("Error");
}
});
1 - 请求方法的规范(GET,POST,UPDATE等)
2 - 指向您视图的网址。 请注意,有任何协议规范(http)。因为你的js住在你的django应用程序中 网址是相对于此应用程序。为此你需要一些网址:
urlpatterns = patterns('your_app.views',
...
url(r'url_to/you_view', 'your_view')
...
)
3 - 可选,要发送到de django视图的一些数据。 (在你的情况下,你不需要它)
4 - 这很重要,在这里您将处理请求成功时服务器返回的数据。 按照上面的例子,这里的数据是一个json对象,如:
{data: [...]}
其中[...]
代表jason格式的django序列化对象列表。(参见文档链接)。
5 - 在error
上将调用此函数,而不是success
指定的函数。
有关JQuery的$ .ajax对象的更多信息,请参阅$.ajax API Reference。