2010-09-13 28 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调用中,我现在明白我只是调用'all'部分剩余的“前面部分”作为getattr中的对象,所以需要分开完成,感谢清除它...我曾想过我可以这样做:dbobject = getattr(model,'objects.all') (),但这不起作用,所以这种困惑我从那里 – Rick 2010-09-13 08:41:01

2

您需要呼叫如果它是一个功能,例如属性

ret = getattr(mymodel,'objects') 
all = getattr(ret,'all') 
self.dbobject = all() 
相关问题