Фильтр объектов, которые имеют внешний ключ от другого объекта - 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.