drf - Как отфильтровать по 1 элементу с учетом отношения "многие ко многим" - PullRequest
0 голосов
/ 06 мая 2020

У меня есть 2 таблицы Product и Price. У товара может быть несколько цен. Это для запоминания старых цен на продукт.

В моем представлении продукта у меня есть следующий код:

products = ProductFilter(filters, queryset=products.all())

ProductFilter - это настраиваемый класс фильтра. Переменная фильтра такая же, как request.GET.

Вот как выглядит фильтр:

class ProductFilter(django_filters.FilterSet):
    ...
    price__final_price__gte = django_filters.NumberFilter(
        field_name="price__final_price", lookup_expr="gte"
    )
    price__final_price__lte = django_filters.NumberFilter(
        field_name="price__final_price", lookup_expr="lte"
    )
    price__currency = django_filters.CharFilter()

    class Meta:
        model = Product
        fields = ["name", "external_id"]

Это проблема. Если для продукта A, например, 3 цены.

Продукт A:
1. 50 $ - 2020 / март
2. 20 $ - 2019 / de c
3. 60 $ - 2019 / jan

Когда я фильтрую, я хочу фильтровать только самую последнюю цену. Поэтому, если бы в моем filter было price__final_price__lte: 30, я бы не хотел, чтобы этот продукт был выбран, потому что цена на 2019 / de c действительно была ниже 30, а самая текущая цена - нет. Каким образом мне нужно изменить мой класс ProductFilter, чтобы это стало возможным?

(Некоторые идеи, которые у меня были, где искать ближайшую дату с учетом текущей даты, но я не мог заставить это работать.) Любая помощь будет принята с благодарностью.

...