Форум сайта python.su
0
Доброго времени суток, дорогие форумчане.
Сегодня потребовалось создать нечто вроде фильтрации объектов по необходимым параметрам.
Если коротко:
Как погрузить данные в objects.filter()
kwargs = [('template__t_type', self.type)] if self.par1: kwargs.append(('template__par1__gte', self.par1)) if self.par2: kwargs.append(('template__par2__gte', self.par2)) if self.par3: kwargs.append(('template__par3__gte', self.par3)) if self.par4: kwargs.append(('template__par4__gte', self.par4)) if self.par5: kwargs.append(('template__par5__gte', self.par5)) user_index = SomeOne.objects.filter(kwargs)
Отредактировано dobroe_ytro_na_foryme (Июль 24, 2015 16:03:22)
Офлайн
0
Написал вот такую функцию
def kwargs_fabric(kwargs): for i in range(len(kwargs)): return kwargs[i] user_index = SomeOne.objects.filter(kwargs_fabric(kwargs))
Отредактировано dobroe_ytro_na_foryme (Июль 24, 2015 16:29:36)
Офлайн
186
Как-то так:
from django.db.models import Q kwargs = [Q(template__t_type = self.type)] if self.par1: kwargs.append(Q(template__par1__gte = self.par1)) user_index = SomeOne.objects.filter(*kwargs)
Офлайн
0
RodegastТакая штука не работает, выдает ошибку
Как-то так:
need more than 1 value to unpack /var/www/.envs/asast/local/lib/python2.7/site-packages/django/db/models/sql/query.py in build_filter The 'can_reuse' is a set of reusable joins for multijoins. The method will create a filter clause that can be added to the current query. However, if the filter isn't added to the query then the caller is responsible for unreffing the joins used. """ arg, value = filter_expr ... if not arg: raise FieldError("Cannot parse keyword query %r" % arg) lookups, parts, reffed_aggregate = self.solve_lookup_type(arg) if not allow_joins and len(parts) > 1: raise FieldError("Joined field references are not permitted in this query") ▼ Local vars Variable Value current_negated False split_subq True branch_negated False self <django.db.models.sql.query.Query object at 0x7f523603c9d0> connector u'AND' allow_joins True filter_expr [<Q: (AND: ('template__t_type__id', 7))>] can_reuse set([])
Офлайн
0
Упс, работает…
Не доставил * в SomeOne.objects.filter(*kwargs)
Разобрался с *args и **kwargs, спасибо!
Отредактировано dobroe_ytro_na_foryme (Июль 24, 2015 17:02:07)
Офлайн