@frilix
Иногда "творю"

Django ORM фильтр?

Добрый день! Не могу создать запрос в django. Сделаны фильтры на сайте таким образом:

class FilterCategory(CreationModificationDateMixin):
    category = TreeManyToManyField(
        'category.Category',
        verbose_name='Категория фильтра'
    )

    name = models.CharField(
        'Название фильтра для категории',
        max_length=250
    )

    slug = models.SlugField(
        'Название фильтра для URL',
        max_length=250
    )

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'Фильр'
        verbose_name_plural = 'Фильтры'


class FilterSelect(CreationModificationDateMixin):
    filter_category = models.ForeignKey(
        FilterCategory,
        verbose_name='Фильтр Категории',
        related_name='values'
    )

    name = models.CharField(
        'Значение фильтра',
        max_length=250
    )

    slug = models.SlugField(
        'Значение фильтра для URL',
        max_length=250
    )

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'Занчение фильтра'
        verbose_name_plural = 'Значение фильтров'


class ProductFilter(models.Model):
    product = models.ForeignKey(
        'products.Product',
        on_delete=models.CASCADE,
        verbose_name='Товар',
        related_name='filters'
    )

    filter_category = models.ForeignKey(
        FilterCategory,
        null=True,
        on_delete=models.CASCADE,
        verbose_name='Фильтр категории'
    )

    values = models.ForeignKey(
        FilterSelect,
        null=True,
        blank=True,
        verbose_name='Значения фильтра'
    )

    def __str__(self):
        return 'Фильтр'

    class Meta:
        verbose_name = 'Фильтр товаров'
        verbose_name_plural = 'Фильтры товаров'


То есть фильтр привязывается к определенным категориям, FilterSelect привязывается к FilterCategory, а ProductFilter привязывается к товару и обоим FilterSelect и FilterCategory.

В шаблоне значения вывожу так:

{% for fil in product.filters.all %}
 <div class="col-md-6">
   <div class="row">
    <div class="col-xs-6"><div class="sec-t">{{ fil.filter_category.name }}</div></div>
    <div class="col-xs-6">
        <div class="sec-v"><a href="#">{{ fil.values.name }}</a></div>
    </div>

</div>
{% endfor %}


Но в самой категории не могу понять как фильтровать товары. Пробовал такое

for value in values:
    qs.filter(filters__values__slug=value)


Где value - это slug для фильтра который приходит с фронтенда. Данный вариант не работает. А идея проста: фильтровать товары для которых определенны значения slug в FilterSelect точно такие же как и в массиве values.

Как можно такое сделать?
  • Вопрос задан
  • 376 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы