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' })