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
для этого фильтра.