Уведомления

Группа в Telegram: @pythonsu

#1 Март 27, 2012 21:46:30

whitehat
От:
Зарегистрирован: 2011-11-03
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

необязательный параметр...

Ниже кусок из довольно объёмного кода, который приходится дублировать из-за того, что я не понимаю, как можно сделать включение одного из параметров необязательным

if profile_type == 'D':
            q_table = UserDownloads.objects.filter(date__lt = end_day, username__in = userlist)
           ...
elif profile_type == 'A':
           ...
else:
            q_table = UserDownloads.objects.filter(date__lt = end_day)
В примере по одной строке, а их несколько десятков, очень напрягает править сначала для одного profile_type, потом для второго, потом для третьего… Есть ли способ как-то записать этот код одной строкой, что бы username__in появлялся только по profile_type == ‘D’?
Спасибо



Отредактировано whitehat (Март 27, 2012 21:47:02)

Офлайн

#2 Март 27, 2012 22:14:17

kmike
От:
Зарегистрирован: 2009-12-07
Сообщения: 56
Репутация: +  4  -
Профиль   Отправить e-mail  

необязательный параметр...

если это django, то можно так:

q_table = UserDownloads.objects.filter(date__lt = end_day)
if profile_type == 'D':
    q_table = q_table.filter(username__in = userlist)

Еще можно так (хоть django, хоть не django):

filters = dict(date__lt=end_day)
if profile_type == 'D':
    filters['username__in'] = userlist
q_table = UserDownloads.objects.filter(**filters)



Офлайн

#3 Март 27, 2012 22:34:20

agalen
От:
Зарегистрирован: 2011-03-23
Сообщения: 185
Репутация: +  17  -
Профиль   Отправить e-mail  

необязательный параметр...

q_table = UserDownloads.objects.filter(date__lt = end_day, **( { "username__in": userlist } if profile_type == 'D' else {} ) )



Офлайн

#4 Март 28, 2012 00:27:12

whitehat
От:
Зарегистрирован: 2011-11-03
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

необязательный параметр...

Спасибо большое! :D



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version