1

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

目前我正在将它们写入models.py文件中,但我什至还没有完成一半我觉得这样我会弄乱模型文件(太多的小功能)。

您知道解决问题的更好方法吗?

4

2 回答 2

4

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

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

例如,创建一个名为db. 根据它们正在使用的实体/集合将您的辅助函数划分为单独的脚本。例如:

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

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

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

希望有帮助。

于 2013-07-07T18:58:54.710 回答
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(...)
于 2013-07-07T19:01:48.557 回答