gpt4 book ai didi

python - django - 如何将表的记录与来自另一个表的计算计数值绑定(bind)

转载 作者:太空宇宙 更新时间:2023-11-04 05:25:52 25 4
gpt4 key购买 nike

在我的应用程序中,我有一个培训列表。此列表中的一个字段应显示每个培训的预订数量。为了说明我的意思,我准备了 SQL 查询:

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')),但结果是所有训练的所有计数值为列表中的每个训练显示。应显示一个适合每次训练的计数值。

enter image description here

View .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

模型.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 %}

最佳答案

 for each_training in context['trainings']:       
each_training.diff = each_training.availability - each_training.counter
each_training.counter = Booking.objects.filter(training_id=each_training.id).count() # just modify this line
return context

关于python - django - 如何将表的记录与来自另一个表的计算计数值绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38728128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com