2010-09-13 2 views
5

Попытавшись заставить это работать некоторое время и искать его, я действительно тупик, поэтому размещаю здесь ... Я хочу сделать некоторые функции в классах, которые я пишу для django как можно более общие, поэтому я хочу использовать getattr называть такие функции, как показано ниже в общей форме:Python, 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') 

ответ

12

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

dbobject = mymodel.objects.all() 

Доступ к способу mymodel.objects.all, а затем его называет.

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

Доступ к методу mymodel.objects.all, но не назовите его.

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

self.dbobject = getattr(ret,'all')() 
+0

спасибо .. хорошо, я получаю сейчас .. я пытался сделать что-то подобное раньше, но положить все это в только один GetAttr вызов, теперь я понимаю, что я просто называя «все» часть с остальная часть «предыдущей части» как объект в getattr, так что это нужно делать отдельно, спасибо за это, я понял, что мог бы сделать: dbobject = getattr (model, 'objects.all')(), но это не сработало, поэтому меня это смутило – Rick

2

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

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