1

Django プロジェクトでは PyMongo を使用する必要がありますが、常に Django の ORM または Mongoengine を使用してきました。古いセットアップでは、すべてのモデルに実際の作業を行う独自のメソッドがありました。今回は、PyMongo を使わなければならないので、モデルがなく、ヘルパー関数をどこに置くべきかわかりません。

現在、私はそれらをmodels.pyファイル内に書いていますが、半分も終わっていないので、この方法でモデルファイルが散らかっていると感じています(小さな関数が多すぎます)。

問題のより良い解決策を知っていますか?

4

2 に答える 2

4

django ORM を使用していません。モデルがありませんmodels.py。空のままにしておく必要があります。

使用を検討できるオプションの 1 つを次に示します。

などのパッケージを作成します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 に答える