目前有一个包含10个问题的数据库,这些问题从1-4发布一个数字我只想添加该数字以创建总数然后只显示该总数的最接近匹配 的 Models.py
class Question(models.Model):
name = models.CharField(max_length=10, primary_key=True)
question1 = models.CharField(max_length=50, choices=Question1_CHOICES)
question2 = models.CharField(max_length=50, choices=Question2_CHOICES)
question3 = models.CharField(max_length=50, choices=Question3_CHOICES)
question4 = models.CharField(max_length=50, choices=Question4_CHOICES)
question5 = models.CharField(max_length=50, choices=Question5_CHOICES)
question6 = models.CharField(max_length=50, choices=Question6_CHOICES)
question7 = models.CharField(max_length=50, choices=Question7_CHOICES)
question8 = models.CharField(max_length=50, choices=Question8_CHOICES)
question9 = models.CharField(max_length=50, choices=Question9_CHOICES)
question10 = models.CharField(max_length=50, choices=Question10_CHOICES)
Views.py
def comparison(request):
return render(request, 'music/compare.html', dict(rows=Question.objects.all(), total=Question.objects.count()))
我尝试使用总计数,但我不认为它是正确的。 附加数据库布局的副本
修改 - 添加了compare.html
{% extends 'music/index.html' %}
{% block body %}
<body>
<table>
<table>
<th>
<tr>
<table border="3">
{% for row in rows %}
<td><strong>Name</strong></td>
<td>Question 1 </td>
<td>Question 2 </td>
<td>Question 3 </td>
<td>Question 4 </td>
<td>Question 5 </td>
<td>Question 6 </td>
<td>Question 7 </td>
<td>Question 8 </td>
<td>Question 9 </td>
<td>Question 10 </td>
<td>Total </td>
</tr>
</th>
<tr>
<td>{{row.name}} </td>
<td>{{row.question1}} </td>
<td>{{row.question2}} </td>
<td>{{row.question3}} </td>
<td>{{row.question4}} </td>
<td>{{row.question5}} </td>
<td>{{row.question6}} </td>
<td>{{row.question7}} </td>
<td>{{row.question8}} </td>
<td>{{row.question9}} </td>
<td>{{row.question10}} </td>
<td>{{ question.s }} </td>
</tr>
</tr>
{% endfor %}
</table>
</body>
{%endblock%
}
答案 0 :(得分:1)
如果您希望每行Question1
到Question10
的总和,请执行以下操作:
from django.db.models import F
questions = Question.objects.annotate(s=F('question1') + F('question2') + F('question3') + F('question4') + F('question5') + F('question6') + F('question7') + F('question8') + F('question9') + F('question10'))
这将产生x
个等于行数的结果。
然后你可以这样做:
for question in questions:
print(question.s) # prints the sum of Question1 - Question10
或者,如果您只想要值(不是Question
个对象),那么:
sums = Question.objects.annotate(s=F('question1') + F('question2') + F('question3') + F('question4') + F('question5') + F('question6') + F('question7') + F('question8') + F('question9') + F('question10')).values('s')
[更新]:您似乎没有正确循环questions
QuerySet
。
以下是您需要做的事情:
你的views.py
中的就像这样:
questions = Question.objects.annotate(s=F('question1') + F('question2') + F('question3') + F('question4') + F('question5') + F('question6') + F('question7') + F('question8') + F('question9') + F('question10'))
...
return render(request, 'music/compare.html', {'questions': questions})
然后在你的HTML中就像这样:
{% for question in questions %}
<td>Question 1 </td>
...
<td>{{question.name}} </td>
...
<td>{{ question.s }} </td>
修改2 - 更改了views.py
def compare():
questions = Question.objects.annotate(
s=F('question1') + F('question2') + F('question3') + F('question4') + F('question5') + F('question6') + F(
'question7') + F('question8') + F('question9') + F('question10'))
...
return render(request, 'music/compare.html', {'questions': questions})
compare.html
{% for question in questions %}
<td>Question 1 </td>
...
<td>{{question.name}} </td>
...
<td>{{ question.s }} </td>
{%endfor%}
</body>