1

我查看了文档,并广泛搜索了谷歌,但没有找到解决我的问题的方法。
这是我的readRSS函数(注意“get”是 Kenneth Reitz 的 requests 模块的一个方法):

def readRSS(name, loc):
    linkList = []
    linkTitles = list(ElementTree.fromstring(get(loc).content).iter('title'))
    linkLocs = list(ElementTree.fromstring(get(loc).content).iter('link'))
    for title, loc in zip(linkTitles, linkLocs):
        linkList.append((title.text, loc.text))
    return {name: linkList}

这是我的 MongoAlchemy 课程之一:

class Feed(db.Document):
    feedname = db.StringField(max_length=80)
    location = db.StringField(max_length=240)
    lastupdated = datetime.utcnow()

    def __dict__(self):
        return readRSS(self.feedname, self.location)

如您所见,我必须readRSS在类的函数中调用该函数,所以我可以通过self,因为它依赖于字段feednamelocation.
我想知道是否有其他方法可以做到这一点,所以我可以将readRSS返回值保存到Feed文档中的一个字段中。我尝试将readRSS函数的返回值分配给函数内的变量__dict__——这也不起作用。

我的应用程序中有该功能,但我想将结果保存到文档中以减轻服务器上的负载(我从中获取 RSS 提要的服务器)。

有没有办法做我打算做的事情,还是我做错了?

4

1 回答 1

1

我找到了答案。我需要使用computed_field装饰器,其中第一个参数是我的返回值的结构,并且deps是一个包含该字段所依赖的字段的集合。然后我将依赖字段传递给函数的参数,然后就可以了。

@fields.computed_field(db.KVField(db.StringField(), db.ListField(db.TupleField(db.StringField()))), deps=[feedname, location])
def getFeedContent(a=[feedname, location]):
    return readRSS(a['feedname'], a['location'])

无论如何,谢谢大家。

于 2013-01-28T06:21:06.377 回答