何时在不使用模型和ORM时放置辅助函数?

时间:2013-07-07 16:37:54

标签: python django django-models pymongo

我必须在Django项目中使用PyMongo,虽然我一直使用Django的ORM或Mongoengine。使用旧的设置,每个模型都有自己的方法,可以做一些实际的工作。这一次,不得不使用PyMongo,我没有模型,我不知道在哪里放置辅助函数。

目前我正在将它们写在models.py文件中,但是我甚至都没有完成,我已经感觉到这种方式我混淆了模型文件(太多小函数)。

你知道更好的解决方案吗?

2 个答案:

答案 0 :(得分:4)

你没有使用django ORM,你没有任何模型 - 你应该将models.py留空。

这是您可以考虑使用的一个选项。

创建一个名为db的包。根据他们使用的实体/集合将助手函数划分为单独的脚本。 E.g:

db/
    __init__.py
    user.py
    customer.py
    role.py

您可以留在__init__.py中的其他通用助手函数或为它们创建单独的模块。

此外,在将当前models.py文件拆分为这些python模块时,您可能会注意到大多数辅助函数都是相似的 - 在这种情况下,考虑使用OOP方法,为每个集合创建一个python类,定义泛型方法等(它看起来像是在发明你自己的ORM层)。

希望有所帮助。

答案 1 :(得分:1)

您可以将辅助方法组织为类似“模型”类的类方法。重新组织后,模型文件可能如下所示:

# models.py

class BaseModel(object):
    connection = Connection()
    db = connection['test']

    collection = None    # override in subclasss

    @classmethod
    def get(cls, object_id):
        return cls.collection.findOne({"_id": object_id})


class Person(BaseModel):
    collection = BaseModel.db['person']

    @classmethod
    def get_old_people(cls):
       return cls.collection.find(...)