我必须在 Django 项目中使用 PyMongo,尽管我一直使用 Django 的 ORM 或 Mongoengine。使用旧设置,每个模型都有自己的方法,可以做一些实际的工作。这一次,不得不使用 PyMongo,我没有模型,也不知道把辅助函数放在哪里。
目前我正在将它们写入models.py
文件中,但我什至还没有完成一半我觉得这样我会弄乱模型文件(太多的小功能)。
您知道解决问题的更好方法吗?
我必须在 Django 项目中使用 PyMongo,尽管我一直使用 Django 的 ORM 或 Mongoengine。使用旧设置,每个模型都有自己的方法,可以做一些实际的工作。这一次,不得不使用 PyMongo,我没有模型,也不知道把辅助函数放在哪里。
目前我正在将它们写入models.py
文件中,但我什至还没有完成一半我觉得这样我会弄乱模型文件(太多的小功能)。
您知道解决问题的更好方法吗?
你没有使用 django ORM,你没有任何模型 - 你应该models.py
留空。
这是您可以考虑使用的一个选项。
例如,创建一个名为db
. 根据它们正在使用的实体/集合将您的辅助函数划分为单独的脚本。例如:
db/
__init__.py
user.py
customer.py
role.py
您可以保留其他通用辅助函数__init__.py
或为它们创建单独的模块。
此外,在将当前models.py
文件拆分为这些 python 模块时,您可能会注意到大多数辅助函数是相似的——在这种情况下,考虑使用 OOP 方法,为每个集合创建一个 python 类,定义泛型方法等(它会看起来像是在发明自己的 ORM 层)。
希望有帮助。
您可以将辅助方法组织为“模型”类的类方法。重新组织后,模型文件可能如下所示:
# 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(...)