3 Набор фильтров для моделей django с помощью django-filter

У меня есть 3 разные модели django, и я хочу фильтровать их с помощью django-filter. ORM запрос, который я написал ниже, работает без проблем. но как я могу сделать это с помощью django-filter (filters.FilterSet)?

Employee.objects.filter(companyrecord__company__cname__icontains="ompanyname") ЭТО РАБОТАЕТ

Это работает для меня в ORM. Но как я могу сделать это в наборе фильтров. Я написал выше, что я хочу сделать

Мои модели:

class Employee(models.Model):
    employee_name = models.CharField(...)

class CompanyRecord(models.Model):
    employee = models.ForeignKey(Employee)
    company = models.ForeignKey(Company)

class Company(models.Model):
    cname = models.CharField(...)

Мой набор фильтров:

class EmployeeFilter(filters.FilterSet):
    full_name = filters.CharFilter(field_name="full_name", lookup_expr='icontains')

    class Meta:
        model = Employee
         fields = ['full_name']

Параметр field_name=… [readthedocs.io] может принимать цепочку имен полей, как при фильтрации. Действительно:

Имена полей могут переходить через отношения, соединяя связанные части с помощью разделителя поиска ORM (__). Например, имена продуктов manufacturer__name.

.

Так вы можете работать с:

class EmployeeFilter(filters.FilterSet):
    full_name = filters.CharFilter(
        field_name="full_name", lookup_expr='icontains'
    )
    company_name = filters.CharFilter(
        field_name="companyrecord__company__cname", lookup_expr='icontains'
    )

    class Meta:
        model = Employee
        fields = ['full_name']

Затем вы фильтруете с помощью company_name для этого фильтра.

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