如何在 Django 中通过外键列出与特定对象关联的所有对象?
How can I list all objects associated to a particular object via foreign key in Django?
我有一个列出所有 Vehicle 对象的 ListView。我如何创建另一个视图,当我单击该车辆旁边标记为 ### 的 link 时,它会显示与该车辆关联的所有作业对象的列表?
models.py
class Vehicle(models.Model):
vehicle_reg = models.CharField(primary_key=True, max_length=7)
vehicle_make = models.CharField(max_length=15)
vehicle_model = models.CharField(max_length=15)
class Job(models.Model):
car = models.ForeignKey(Vehicle, on_delete=models.CASCADE)
html
<table class="table">
<thead class="thead-dark">
<tr class="table-light">
<th scope="col">Registration</th>
<th scope="col">Make</th>
<th scope="col">Model</th>
</tr>
</thead>
<tbody>
{% for vehicle in vehicleList %}
<tr class="table-light">
<td class="lead">
<a href="{% url '###' pk=vehicle.pk %}">{{vehicle.vehicle_reg}}</a></td>
<td class="lead">{{vehicle.vehicle_make}}</td>
<td class="lead">{{vehicle.vehicle_model}}</td>
</tr>
views.py
class VehicleListView(ListView):
context_object_name = 'vehicleList'
model = Vehicle
template_name = 'vehicles/vehicle_list.html'
提前致谢。
您必须创建一个单独的视图并将外键 ID 解析到该视图(通过 url)。然后在该视图中,由于您使用的是基于 class 的视图,因此将 get_queryset
覆盖为 Job.objects.filter(car_id=kwargs.get('vehicle_id'))
class JobListView(ListView):
context_object_name = 'jobList'
model = Job
template_name = 'vehicles/job_list.html'
def get_queryset(self):
qs = Job.objects.filter(vehicle_id=self.kwargs.get('vehicle_id'))
return qs
你可以试试这个。
# detail view for vehicle
class VehicleDetailView(DetailView):
model = Vehicle
template_name = 'your_template'
context_object_name = 'vehicle'
# urls.py
path('vehicle/<int:pk>/detail/', VehicleDetailView.as_view(), name='vehicle_detail')
# your_list_template
{% for vehicle in vehicleList %}
......
<a href="{% url 'vehicle_detail' vehicle.pk %}">{{vehicle}}</a>
{% endfor %}
# vehicle detail template
{% for job in vehicle.job_set.all %}
...
{{job}}
{% endfor %}
我有一个列出所有 Vehicle 对象的 ListView。我如何创建另一个视图,当我单击该车辆旁边标记为 ### 的 link 时,它会显示与该车辆关联的所有作业对象的列表?
models.py
class Vehicle(models.Model):
vehicle_reg = models.CharField(primary_key=True, max_length=7)
vehicle_make = models.CharField(max_length=15)
vehicle_model = models.CharField(max_length=15)
class Job(models.Model):
car = models.ForeignKey(Vehicle, on_delete=models.CASCADE)
html
<table class="table">
<thead class="thead-dark">
<tr class="table-light">
<th scope="col">Registration</th>
<th scope="col">Make</th>
<th scope="col">Model</th>
</tr>
</thead>
<tbody>
{% for vehicle in vehicleList %}
<tr class="table-light">
<td class="lead">
<a href="{% url '###' pk=vehicle.pk %}">{{vehicle.vehicle_reg}}</a></td>
<td class="lead">{{vehicle.vehicle_make}}</td>
<td class="lead">{{vehicle.vehicle_model}}</td>
</tr>
views.py
class VehicleListView(ListView):
context_object_name = 'vehicleList'
model = Vehicle
template_name = 'vehicles/vehicle_list.html'
提前致谢。
您必须创建一个单独的视图并将外键 ID 解析到该视图(通过 url)。然后在该视图中,由于您使用的是基于 class 的视图,因此将 get_queryset
覆盖为 Job.objects.filter(car_id=kwargs.get('vehicle_id'))
class JobListView(ListView):
context_object_name = 'jobList'
model = Job
template_name = 'vehicles/job_list.html'
def get_queryset(self):
qs = Job.objects.filter(vehicle_id=self.kwargs.get('vehicle_id'))
return qs
你可以试试这个。
# detail view for vehicle
class VehicleDetailView(DetailView):
model = Vehicle
template_name = 'your_template'
context_object_name = 'vehicle'
# urls.py
path('vehicle/<int:pk>/detail/', VehicleDetailView.as_view(), name='vehicle_detail')
# your_list_template
{% for vehicle in vehicleList %}
......
<a href="{% url 'vehicle_detail' vehicle.pk %}">{{vehicle}}</a>
{% endfor %}
# vehicle detail template
{% for job in vehicle.job_set.all %}
...
{{job}}
{% endfor %}