Как получить поле из другой модели в фильтр в filter.py?

Есть ли способ, как получить поле из другой модели в мой фильтр, который используется в моем шаблоне? Я пытаюсь фильтровать по имени_категории из модели категории в модели склада, которая связана с моделью категории моделью продукта.

Когда я пробую в shell, отношение работает:

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

Но когда я использую аналогичный код в filter.py, я получаю пустое поле вместо поля для категории (другие поля из фильтра работают, поэтому фильтр в порядке):

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)


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