[Fixed]-Fetching model instance from a multiple direct relationship

1đź‘Ť

âś…

Firstly, your specialization and subspecialization are both many-to-many relationships with Doctor. You should declare that explicitly, and drop those intervening models unless you need to store other information on them.

class Doctor(models.Model):
    ...
    specializations = models.ManyToManyField('Specialization')
    subspecializations = models.ManyToManyField('SubSpecialization')

Now you can query for all the subspecializations for doctors who have a specific specialization:

SubSpecialization.objects.filter(doctor__specialization__title='My Specialization')

Your second query doesn’t make sense given the fact there is no relationship between specialization and subspecialization, you’ll need to clarify what you mean by “no subspecialization in a specific specialization”.

Edit

To find doctors who have a specific Specialization and then no subspecializations at all:

Doctor.objects.filter(specialization__name="My Specialization",
                      subspecialization=None)

Leave a comment