Доброго времени суток. Есть модели которые реализуют атрибуты у товара.
class CategoryAttribute(CreationModificationDateMixin):
category = TreeForeignKey(
'category.Category',
verbose_name='Категория для атрибута',
on_delete=models.CASCADE,
)
name = models.CharField(
'Название атрибута',
max_length=100
)
slug = models.SlugField(
'Название в URL'
)
class Meta:
verbose_name = 'Атрибут категории'
verbose_name_plural = 'Атрибуты категории'
def __str__(self):
return '{name}: {category}'.format(name=self.name, category=self.category.name)
class ProductAttribute(models.Model):
category_attribute = models.ForeignKey(
CategoryAttribute,
verbose_name='Атрибут категории',
on_delete=models.CASCADE,
)
product = models.ForeignKey(
'products.Product',
on_delete=models.CASCADE,
verbose_name='Товар',
related_name='attributes'
)
value = models.CharField(
'Значение атрибута',
max_length=250,
blank=True
)
def __str__(self):
return self.value
class Meta:
verbose_name = 'Атрибут продукта'
verbose_name_plural = 'Атрибуты продукта'
Все просто, у определенной категории определенные атрибуты, а само значение заполняется для определенного товара. Вопрос в том, как мне отфильтровать товары, к примеру, которые содержат определенное значение (размер: 12 см) и тд. Я понимаю, что можно было создать что-то наподобие уже предопределенного выбора, но данный подход нерентабильный когда разброс значений слишком большой.
Что реализовано на данный момент:
urls.pyurl(r'^attribute/(?P<id>[-\w]+)-(?P<category_id>[-\w]+)/$', views.AttributeProducts.as_view(), name='filter'),
views.py...
self.attribute = get_object_or_404(ProductAttribute, pk=self.kwargs.get('id'))
self.category = get_object_or_404(Category, pk=self.kwargs.get('category_id'))
return Product.with_image.filter(attributes__value__icontains=self.attribute.value, category=self.category.id).order_by(sort_by)
Все работает и фильтрует, но возникает проблема со стороны SEO. Так как для каждого товара нужно задавать атрибут, то получается, что атрибут: 2222-11 и 21221-11(например) могут быть одинаковыми, соотвественно в индексе может получится много ненужных ссылок.
Какие я вижу варианты:
1) Закрыть от индексации данные ссылки и оставить так, чтоб работала система
2) Написать свой преобразователь типа slugify и декодер для него, таким образом значение пробрасывать через url
Есть ли еще варианты решения данной проблемы?