Джанго сделать запрос - PullRequest
       1

Джанго сделать запрос

0 голосов
/ 04 октября 2011

DB TABLE

select * from AAA;
id   |    Name     |    Class  | Grade    |
--------------------------------------
1    |     john    |      1    |   A      |
2    |     Jane    |      2    |   B      |
3    |     Joon    |      2    |   A      |
4    |     Josh    |      3    |   C      |

|

Код

Django
search_result = AAA.objects.filter(Grade = 'B').count() 
print search_result 

search_result -> 2

Я хочу изменить Grade на Class на VALUE.

Django
target_filter = 'Class'
search_result = AAA.objects.filter(__"target_filter..."__ = '3').count()

search_result -> 1

Q) Как мне заполнить этот код?Возможно ли это?

Ответы [ 3 ]

1 голос
/ 04 октября 2011

Может быть, вы можете сделать это так:

target_filter = 'Class'
filter_args = {target_filter: 3}
search_result = AAA.objects.filter(**filter_args).count()
0 голосов
/ 04 октября 2011

Вы можете сократить пример Эби, поместив kwargs непосредственно

target_filter = 'Class'
search_result = AAA.objects.filter(**{target_filter:3}).count()
0 голосов
/ 04 октября 2011

Это как-то такой же ответ, который я дал здесь .Вы также можете использовать getattr, но теперь с самим объектом модуля.Это либо __module__, если это тот же модуль, либо модуль, который вы import изд.

target_filter = 'Class'
search_result = AAA.objects.filter(getattr(__module__, target_filter) = '3').count()

РЕДАКТИРОВАТЬ: Я понял, это неможно получить доступ к текущему модулю через __module__.Если класс объявлен в том же модуле, что и ваш поиск, вы можете использовать globals()[target_filter] для доступа к нему.Если ваш поиск из другого модуля, вы можете сделать это следующим образом:

import somemodule

...

target_filter = 'Class'
search_result = AAA.objects.filter(getattr(somemodule, target_filter) = '3').count()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...