gpt4 book ai didi

python - Django 模板 - 使用 2 个模型来过滤结果

转载 作者:行者123 更新时间:2023-12-01 02:03:09 25 4
gpt4 key购买 nike

如果我的问题不太清楚,我深表歉意。我是 Django 新手,这是我第一次在这里提问,因为我似乎找不到问题的解决方案。

我已经研究了如何在 Django 模板中使用多个模型并成功地做到了这一点,但是,我的要求之一是列表中的每个卡车司机应显示相应的注册卡车单位数量,但我似乎无法来做到这一点。

输出应该是这样的:

Truckers List
Registered Trucker Number of units
Trucker #1 10
Trucker #2 5
...
Trucker #n 3

如果您有建议,我非常感激。如果相关的话,我在 Windows 上使用 Django 版本 2.0.1 和 Python 3.6。

这是我的代码:

models.py

class Trucker(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name

class TruckUnit(models.Model):
plate_number = models.CharField(max_length=7)
trucker = models.ForeignKey(Trucker, related_name='truckunits', on_delete=models.CASCADE)

def __str__(self):
return self.plate_number

views.py

class TruckerList(generic.ListView):
model = Trucker
context_object_name = 'trucker_list'
queryset = Trucker.objects.all().order_by('name')
template_name = 'trip_monitor/trucker_list.html'

def get_context_data(self. **kwargs):
context = super(TruckerList, self).get_context_data(**kwargs)
context['units'] = TruckUnit.objects.all()
context['truckers'] = self.queryset
return context

urls.py

from django.urls import path
from . import views

urlpatterns = [
path('truckers/', views.TruckerList.as_view(), name='trucker_list'),
]

trucker_list.html

{% extends 'base.html' %}
{% block content %}
<h3>Trucker List</h3>
{% if trucker_list %}
<table>
<thead>
<tr>
<th>Registered Truckers</th>
<th>Number of units</th>
</tr>
</thead>
<tbody>
{% for trucker in trucker_list %}
<tr>
<td>{{ trucker.name }}</td>
<td>{{ units.count }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p>No registered truckers yet</p>
{% endif %}
{% endblock %}

最佳答案

你可以做到

from django.db.models import Count

然后

queryset = Trucker.objects.all().annotate(Count("truckunits")).order_by('name')

然后在模板中

{% for trucker in trucker_list %}
<tr>
<td>{{ trucker.name }}</td>
<td>{{ trucker.truckunits__count }}</td>
</tr>
{% endfor %}

关于python - Django 模板 - 使用 2 个模型来过滤结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49377595/

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