0

のような関数を作成したい

def dynamic_model(model_name,**kwargs)
    obj=model_name.object.create(**dct)
    return obj

オブジェクトを何度も作成してデータベースに保存したくないので、モデル名を関数に渡し、渡された**kwargsに従ってオブジェクトを作成します。パスランタイムをインポートする方法と、関数の本体となるもの。

*そして、どのモデルがどこからインポートされるのかわからない主なことは、実行時にすべてのものが表示されるので、関数内のモデル名に関するパスをインポートするにはどうすればよいですか*

4

2 に答える 2

1

この関数の要点はよくわかりませんが、それでもこのようなことをしたい場合は、決してこれを使用eval()しないでください。

あなたはこれを試すことができます

from django.db.models.loading import get_model

def dynamic_model(app_name, model_name,**kwargs)
    # app_name and model_name should be plain strings
    # the name of your app and model
    klass = get_model(app_name, model_name)
    obj = klass.object.create(**kwargs)
    return obj

アプリとモデルの名前などのプレーンな文字列を渡すだけで、必要なモデル クラスが返されます。何もインポートする必要はありません。

于 2013-07-13T07:12:55.297 に答える