我必须在Django项目中使用PyMongo,虽然我一直使用Django的ORM或Mongoengine。使用旧的设置,每个模型都有自己的方法,可以做一些实际的工作。这一次,不得不使用PyMongo,我没有模型,我不知道在哪里放置辅助函数。
目前我正在将它们写在models.py
文件中,但是我甚至都没有完成,我已经感觉到这种方式我混淆了模型文件(太多小函数)。
你知道更好的解决方案吗?
答案 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(...)