微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何通过 Django 中的外键列出与特定对象关联的所有对象?

如何解决如何通过 Django 中的外键列出与特定对象关联的所有对象?

我有一个列出所有 Vehicle 对象的 ListView。我如何创建另一个视图,当我单击该车辆旁边标记为 ### 的链接时,该视图将显示与该车辆关联的所有 Job 对象的列表?

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'

提前致谢。

解决方法

你可以试试这个。

# 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 %}
,

您必须创建一个单独的视图并将外键 ID 解析到该视图中(通过 url)。然后在该视图中,由于您使用的是基于类的视图,请使用 Job.objects.filter(car_id=kwargs.get('vehicle_id')) 覆盖 get_queryset

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。