Python, Django, как использовать getattr (или другой метод) для вызова объекта, который имеет несколько атрибутов? - PullRequest
5 голосов
/ 13 сентября 2010

После попытки заставить это работать некоторое время и поиска вокруг, я действительно озадачен, поэтому пишу здесь ... Я хочу сделать некоторые функции в классах, которые я пишу для django, как можно более общими, поэтому я хочу использоватьgetattr для вызова функций, таких как приведенная ниже, в общем виде:

способ, которым я это делаю, который работает (не универсальным образом):

from django.db.models import get_model
mymodel = get_model('appname', 'modelname')
dbobject = mymodel.objects.all()

одна из моих попыток создать это вобщий способ, все еще не работающий, он возвращает что-то обратно, но это не правильный тип объекта, так что я могу получить от него данные (это вызов базы данных для django)

ret = getattr(mymodel,'objects')
dbobject = getattr(ret,'all')

Ответы [ 2 ]

12 голосов
/ 13 сентября 2010

Вы забыли назвать результат.

dbobject = mymodel.objects.all()

Получает доступ к методу mymodel.objects.all и затем вызывает его.

ret = getattr(mymodel,'objects')
self.dbobject = getattr(ret,'all')

обращается к методу mymodel.objects.all, но не вызывает его.

Все, что вам нужно, это изменить последнюю строку на:

self.dbobject = getattr(ret,'all')()
2 голосов
/ 13 сентября 2010

Вам потребуется вызвать атрибут, если это функция, например

ret = getattr(mymodel,'objects')
all = getattr(ret,'all')
self.dbobject = all()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...