How to get field from different model to filter in filter.py?

is there some way how get field from different model to my filter which is used in my template? I am trying to filter by category_name from Category model in Warehouse model which is connected with Category Model by Product model.

When I try in shell, relation is working:

Warehouse.objects.filter(product__category__category_name__icontains="shoes")

But when I use similar code in filter.py, I get blank field instead of field for category (other fields from filter are working, so filter is OK):

class WarehouseDataFilter(django_filters.FilterSet):
    product = django_filters.CharFilter(label="Product", field_name="product__name", lookup_expr='icontains')
    category = django_filters.CharFilter(label="Kategorie", field_name="product__category__category_name", lookup_expr="icontains" ),
    pyear = django_filters.NumberFilter(label="Rok výroby", field_name="product__pyear")

    class Meta:
        model = Warehouse
        fields = ("product", "pieces")
        attrs={"a": {"class": "orange"}, "thead": {"class": "orange"}}
    
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.form.helper = WarehouseDataFilterFormHelper()

models.py

class Warehouse(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE, null=True, blank=True)
    pieces = models.IntegerField("Quantity", null=True, blank=True)
    updated_on = models.DateTimeField(auto_now=True, null=True)

class Product(models.Model):
    name = models.CharField("Product", max_length=150)
    pyear = models.IntegerField("Rok Výroby", null=True, blank=True)
    drop = models.IntegerField("Drop", null=True, blank=True)
    productgroup = models.ForeignKey(ProductGroup, on_delete=models.CASCADE, null=True, blank=True)
    category = models.ForeignKey(Category, on_delete=models.CASCADE, null=True, blank=True)

class Category(models.Model):
    category_name = models.CharField("Category", max_length=100, blank=True, null=True)


Back to Top