我已经搜索这个话题几天了,最近在我的朋友的帮助下取得了很大的进步。 我无法正确显示数据,现在确实如此。 剩下的最后一块是让标签正确显示。 我发现了一个类似的问题,并怀疑我可能能够使用数组,但无法完全弄清楚语法。 这是类似的问题。 在 char.js 的标签中传递数组的每个元素是工作正常的代码,只是它显示外键的 ID,而不是实际名称。 如果我从图表标签循环中删除 .id,图表根本不显示。 无论出于何种原因,我似乎无法访问数据的名称,只能访问ID。 提前感谢您的帮助。
我的网页
{% extends 'base5.html' %}
{% block body_block %}
<div class="box6">
<h1 class="title">Number of Books By Author</h1>
<canvas id="myChart"></canvas>
<div>
<script>
var endpoint = '{% url "Books:chart_data" %}'
var defaultData = [];
var labels = [];
array = {{ procedures3 }}
$.ajax({
method: "GET",
credentials: 'same-origin',
url: endpoint,
success: function(data){
defaultData = data.default
var ctx = document.getElementById("myChart");
var myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: [{% for i in book %}{{ i.id }},{% endfor %}],
datasets: [{
label: "# of Procedures",
data: [{% for j in book_count %}
{{ j }},
{% endfor %}],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255,99,132,1)',
'rgba(255,99,132,1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
}
})
},
error: function(error_data){
console.log("error")
console.log(error_data)
},
})
</script>
{% endblock %}
图表视图
class ChartData(LoginRequiredMixin,APIView):
model = Author
authentication_classes = (SessionAuthentication, BasicAuthentication)
permission_classes = (IsAuthenticated,)
def get(self, request, format=None):
default_items = []
labels = []
data = {
"labels": labels,
"default": default_items,
}
return Response(data)
图表视图
class ChartView(LoginRequiredMixin, TemplateView):
template_name = 'Book/chart.html'
def get_context_data(self, **kwargs):
context = super(ChartView, self).get_context_data(**kwargs)
book = Author.objects.filter(id__in=self.request.user.userprofile.author.all()).order_by('id')
books_count = [ Book.objects.filter(author=cls).count() for cls in book ]
context['book'] = book
context['book_count'] = books_count
return context
对我来说,最后一块是弄清楚如何获取书籍的名称,而不是我通过这行代码获得的外键 ID:
labels: [{% for i in book %}{{ i.id }},{% endfor %}],
即使我做 i.name,i.book_name或任何我能想到的东西,似乎也无法访问这个名字。 经过进一步搜索,我相信我需要对名称进行某种类型的反向查找,仍然尝试多种方法。 提前感谢您的帮助。
要引用的字段名称应该在"models.py"文件中定义 - 不清楚您是否有信心 i.name 或已经定义i.book_name,或者您是否在猜测。 它是数据库中源表中的列名。如果它实际上是b_name或标题或其他东西,您将需要专门使用它。
另一件事是,您可能需要在标签列表中的字符串周围使用引号,如果有任何特殊字符可能会导致引号分隔的字符串出现问题,则可能需要内置模板标签"escapejs"。
所以尝试类似的东西(标题只是我的猜测(:
labels: [{% for i in book %}'{{ i.title|escapejs }}',{% endfor %}]