Фильтр объектов, которые имеют внешний ключ от другого объекта - Django

Я хочу отфильтровать сотрудников, только тех, у которых есть ForeignKey, как это сделать? Мое решение не возвращает никаких результатов.

Models.py

class Employee(models.Model):
    name = models.CharField(max_length=200)

class ExperienceCategory(models.Model):
    name = models.CharField(max_length=100, unique=True)

class Experience(models.Model):
    user = models.ForeignKey(Employee, on_delete=models.CASCADE)
    category = models.ForeignKey(ExperienceCategory, on_delete=models.CASCADE)

Views.py

experience_category = *ExperienceCategory object (1)*
#solution - final query
employee_query = Employee.objects.filter(experience__category = experience_category)

Как получить сотрудников, имеющих внешний ключ из Experience?

То, что у вас есть, должно работать нормально, как пример для воспроизведения этого


first_employee = Employee.objects.create(name='First')
second_employee = Employee.objects.create(name='Second')

experience_category = ExperienceCategory.objects.create(name='sample_category')

Experience.objects.create(user=first_employee, category=experience_category)
Experience.objects.create(user=second_employee, category=experience_category)

employee_query = Employee.objects.filter(experience__category = experience_category)
employee_query

>>> <QuerySet [<Employee: Employee object (1)>, <Employee: Employee object (2)>]>

Если вы получаете пустой набор запросов, то это потому, что в вашей базе данных нет ни одного экземпляра Experience с категорией related, равной experience_category. Чтобы получить подсчет количества экземпляров Experience, соответствующих данному фильтру, в вашей базе данных, вы можете выполнить

Experience.objects.filter(category=experience_category).count()

В приведенном мной случае он вернет 2. Проверьте сначала, что этот метод возвращает число больше 0. Если он возвращает 0, вам следует сначала создать несколько экземпляров Experience с соответствующими category.

Вернуться на верх