在我的應用程序中,我有一個培訓列表。此列表中的一個字段應顯示每個培訓的預訂數量。 爲了說明我的意思我準備的SQL查詢:django - 如何綁定另一個表中計算的計數值的表記錄
SELECT *
FROM club_training a
LEFT JOIN
(SELECT training_id, count(*)
FROM club_booking
group by training_id) b
ON a.id = b.training_id
你能不能給我一些建議如何做到這一點在Django? 我在我的代碼中使用了Booking.objects.all().values('training_id').annotate(booked_amount=Count('training_id'))
,但結果是所有培訓的所有計數值都顯示在列表上的每個培訓中。應顯示一個適合每次培訓的計數值。
views.py
class HomePageView(TemplateView):
"""Home Page with list of trainings"""
template_name = 'club/training_list.html'
def get_context_data(self, **kwargs):
now = datetime.datetime.now()
context = super(HomePageView, self).get_context_data(**kwargs)
context['trainings'] = Training.objects.filter(state="A", training_date__gte=now).order_by('training_date', 'start_time')
for each_training in context['trainings']:
each_training.diff = each_training.availability - each_training.counter
each_training.counter = Booking.objects.all().values('training_id').annotate(booked_amount=Count('training_id'))
return context
models.py
class Training(models.Model):
"""Class for plan training"""
STATE = (
('A', 'Active'),
('I', 'Inactive'),
)
name = models.ForeignKey('TrnDesc')
instructor = models.ForeignKey('Instructor')
start_time = models.TimeField(blank=True)
end_time = models.TimeField(default='00:00:00')
availability = models.PositiveIntegerField(default=15)
state = models.CharField(max_length=1, choices=STATE, default='A')
training_date = models.DateField(default=date.today)
counter = models.PositiveIntegerField(default=0)
def __str__(self):
return self.name.name
class Booking(models.Model):
"""Data of people which book fitness classes"""
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
email = models.CharField(max_length=50)
phone = models.CharField(max_length=10)
training = models.ForeignKey('Training')
def __str__(self):
return self.training.name.name
training_list.html
{% extends 'club/base.html' %}
{% block content %}
<ul class="nav nav-pills">
<li role="presentation" class="active"><a href="#">Fitness Classes</a></li>
<li role="presentation"><a href="#">Join Us</a></li>
<li role="presentation"><a href="#">Contact Us</a></li>
</ul>
<br></br>
{% regroup trainings by training_date as date_list %}
{% for date in date_list %}
<div class="panel panel-default">
<div class="panel-heading">{{date.grouper|date:"l, d F o"}}</div>
<table class="table">
<tr>
<th style="width: 20%">Training name</th>
<th style="width: 30%">Training description</th>
<th style="width: 10%">Instructor</th>
<th style="width: 10%">Start time</th>
<th style="width: 10%">End time</th>
<th style="width: 10%">Left</th>
<th style="width: 10%">Test_counter</th>
<th style="width: 10%">Actions</th>
</tr>
{% for training in date.list %}
<tr>
<td>{{training.name}}</td>
<td>{{training.name.desc}}</td>
<td>{{training.instructor}}</td>
<td>{{training.start_time|time:"H:i"}}</td>
<td>{{training.end_time|time:"H:i"}}</td>
<td>{{training.diff}}</td>
<td>{{training.counter}}</td>
<td><a href="{% url 'book' training_id=training.pk%}"><button type="button" class="btn btn-primary">Book</button></a></td>
</tr>
{% endfor %}
</table>
</div>
{% endfor %}
{% endblock %}
所以,如果我得到它的權利,你想**培訓ID **和* *所有預訂組的預訂對象數**,由training_id分組。我對此有正確的理解嗎?還是你想要別的東西? –
在我的培訓列表中,我希望顯示每次培訓的預訂對象的計數(對於每個training_id) – annlii