2014-10-10 5 views
0

У меня есть продукт:Джанго динамический фильтр

class Product(models.Model): 
    ... 

Особенности этого продукта, с Ф.К. к динамическим признакам:

class ProductFeatures(models.Model): 
    product = models.ForeignKey('Product') 
    features_category = models.ForeignKey('FeaturesCategory') 
    value = models.ForeignKey('Features') 

Динамическое имя атрибута модели:

class FeaturesCategory(models.Model): 
    title = models.CharField(max_length=255, verbose_name=_(u'Название')) 

и ценностей для каждого атрибута:

class Features(models.Model): 
    category = models.ForeignKey('FeaturesCategory') 
    value = models.CharField(max_length=255, verbose_name=_(u'Значение')) 

Пример работы все это:

Мы создали FeaturesCategory объект - "Color", добавил некоторые значения к нему: "Красный", "Зеленый", "Blue". И добавил еще один FeaturesCategory объект - "Count" со значениями: "1", "2", "3"

Все это мы добавим к продукту, например:

цвет - красный счет - 3

Проблема, как фильтровать эту продукцию ??

for param in self.request.GET: 
      if not param in ['pangination', 'view', 'order', 'page']: 
       name, value = param.split('_') 
       filters.append(
        Q(productfeatures__features_category__title=name, 
         productfeatures__features_category__features__value=value) 
       ) 

Если у нас есть два «Params» для фильтрации не работает

+0

Какие ценности вы ожидаете в ' '' request.GET'''? – schillingt

+0

Я не уверен, что вы используете 'Q' правильно. Вместо этого попробуйте выполнить «productfeatures__features_category__title = name, productfeatures__features_category__features__value = value». – Ngenator

+0

Моя проблема в том, что я генерирую запрос следующим образом: 'filter (Q (attr = 'Color', value = 'Red'), Q (attr = 'Count', value = '5'))' Если я выбрал два фильтра. .. – Arti

ответ

0

Вы Шоуда построить вам типы Q динамически somethink так:

qlist = [] 
for fi in filters: 
     if len(fi) == 2: 
      fi = fi.split('_') 
      qlist.append(Q((fi[0],fi[1]))) 
    if qlist: 
     YourModel.objects.filter(reduce(operator.and_, qlist)) 
+0

моя проблема в том, что я генерирую запрос следующим образом: filter (Q (attr = 'Color', value = 'Red'), Q (attr = 'Count', value = '5')) Если я выбрал два фильтра. .. И, конечно, он не выбирает продукт, который имеет attr 'color' и 'count' – Arti

Смежные вопросы