I have 3 models:
class Airport(models.Model):
code = models.CharField(max_length=3)
city = models.CharField(max_length=64)
def __str__(self):
return f"{self.city} ({self.code})"
class Flight(models.Model):
origin = models.ForeignKey(Airport, on_delete=models.CASCADE, related_name="departures")
destination = models.ForeignKey(Airport, on_delete=models.CASCADE, related_name="arrivals")
duration = models.IntegerField( )
def __str__(self):
return f"{self.id}: {self.origin} to {self.destination}"
class Passenger(models.Model):
first = models.CharField(max_length=64)
last = models.CharField(max_length=64)
flights = models.ManyToManyField(Flight, blank=True, related_name="passengers")
def __str__(self):
return f"{self.first} {self.last}"
and I am trying to access all passengers of a certain Flight when I visit /<int:flight_id> like this:
def flight(request, flight_id):
flight = Flight.objects.get(id=flight_id)
# return HttpResponse(flight)
return render(request, "flights/flight.html", {
"flight": flight,
"passengers": Flight.passengers # AttributeError: 'ManyToManyDescriptor' object has no attribute 'all'
})
Your response is appreciated
Thank you In advanced
Advertisement
Answer
You can access passengers of an instance of Flight, not directly from class Flight:
def flight(request, flight_id):
flight = Flight.objects.get(id=flight_id)
# return HttpResponse(flight)
return render(request, "flights/flight.html", {
"flight": flight,
"passengers": flight.passengers.all() #here is 'flight' instead of 'Flight'
})