Найти - Пользователи
Полная версия: **kwargs
Начало » Python для новичков » **kwargs
1
dobroe_ytro_na_foryme
Доброго времени суток, дорогие форумчане.

Сегодня потребовалось создать нечто вроде фильтрации объектов по необходимым параметрам.
Если коротко:
Как погрузить данные в 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)

Перепробовал массу вариантов. Начал конечно с того, что **kwargs = dict
dobroe_ytro_na_foryme
Написал вот такую функцию
def kwargs_fabric(kwargs):
    for i in range(len(kwargs)):
        return kwargs[i]
user_index = SomeOne.objects.filter(kwargs_fabric(kwargs))
filter ее глотает, но результат выборки похоже не верный.
Rodegast
Как-то так:
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)
dobroe_ytro_na_foryme
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([])

А вот с функцией все норм получается. Странное это правда.
dobroe_ytro_na_foryme
Упс, работает…
Не доставил * в SomeOne.objects.filter(*kwargs)

Разобрался с *args и **kwargs, спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB