Can not query foreign key related objects using _set | Django?

Viewed 36

can not access foreignkey related objects , showing error

i have crated instance of Hospital and Availablity , But while querying using H1.availablity_set.all()

 //error 
'Hospital' object has no attribute 'availablity_set'

models.py

class Hospital(models.Model):
    name = models.CharField(max_length = 256)
    address = models.CharField(max_length=256,null=True, blank=True)
    phone = models.CharField(max_length=10)
    city = models.ForeignKey(City, on_delete=models.CASCADE, related_name = 'City')

    def __str__(self):
        return self.name

class Availablity(models.Model):
    hospital = models.ForeignKey(Hospital, on_delete = models.CASCADE, related_name='availablities')
    facility = models.ForeignKey(Facility, on_delete= models.CASCADE, related_name='facilities')
    updated_at = models.DateTimeField(auto_now=True)
    total = models.IntegerField(default=0)
    available = models.IntegerField(default=0)

code

1 Answers

For your hospital field of the Availablity (sec), you used related_name='availablities' [Django-doc], this is the name of the relation in reverse, you thus access the Availabilitys for a Hospital:

my_hospital.availablities.all()

Your model classes and related names have some spelling mistakes. Consider renaming Availablity to Availability, related_name='availablities' to related_name='availabilities'. Furthermore it (usually) does not make much sense to give the related_name the same name is the ForeignKey itself, since that is how you query in reverse. It is thus better to rename the relaed_name to:

class Hospital(models.Model):
    # …
    city = models.ForeignKey(
        City,
        on_delete=models.CASCADE,
        related_name='city_hospitals'
    )
Related