5

在尝试让它工作一段时间并四处搜索之后,我真的很难过,所以在这里发帖......我想在我为 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')
4

2 回答 2

13

你忘了调用结果。

dbobject = mymodel.objects.all()

访问该方法mymodel.objects.all,然后调用它。

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

访问该方法mymodel.objects.all但不调用它。

您只需将最后一行更改为:

self.dbobject = getattr(ret,'all')()
于 2010-09-13T08:37:05.503 回答
2

如果它是一个函数,您将需要调用该属性,例如

ret = getattr(mymodel,'objects')
all = getattr(ret,'all')
self.dbobject = all()
于 2010-09-13T08:37:09.653 回答