Search code examples
djangolistviewdjango-modelsdjango-viewsforeign-keys

How can I list all objects associated to a particular object via foreign key in Django?


I have a ListView that lists all Vehicle objects. How can I make another view, that would show a list of all Job objects associated with that vehicle when I click on the link marked ### next to that vehicle?

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'

Thank you in advance.


Solution

  • You can try this.

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