【问题标题】:Python, Django, how to use getattr (or other method) to call object that has multiple attributes?Python,Django,如何使用getattr(或其他方法)调用具有多个属性的对象?
【发布时间】:2011-04-11 13:28:37
【问题描述】:

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

【问题讨论】:

    标签: python django object code-reuse getattr


    【解决方案1】:

    你忘记调用结果了。

    dbobject = mymodel.objects.all()
    

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

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

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

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

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

    【讨论】:

    • 谢谢.. 好的,我现在明白了.. 我之前曾尝试过这样做,但只是将其全部放入一个 getattr 调用中,我现在明白我只是在调用“全部”与“前面的部分”的其余部分一起作为 getattr 中的对象,因此需要单独完成,感谢您清除这个...我以为我可以做到:dbobject = getattr(model,'objects.all ')() 但这不起作用,所以这让我从那里感到困惑
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 2023-04-05
      • 2014-12-27
      • 2011-12-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-03
      相关资源
      最近更新 更多