What is/are the best practices to use get_model() and when should it be imported ?
Ref: https://docs.djangoproject.com/en/1.8/ref/applications/
答案 0 :(得分:1)
当您需要动态获取模型类时,通常使用get_model()
。
一个实际示例:在为迁移编写RunPython
操作时,您将app注册表作为其中一个参数,并使用apps.get_model('TheModel')
导入历史模型。
另一个示例:您有一个具有动态构建的序列化程序的应用程序,并且您将Meta.model
设置为您使用get_model()
获得的类。
另一个例子是使用AppConfig.ready()
在self.get_model()
中导入模型。
要记住,如果您使用的是AppConfig.get_model()
或apps.get_models()
,则只有在应用程序注册表完全填充后才能使用它们。
另一个选项(from .models import TheModel
)只是在代码中的任何位置导入模型的默认方式。
这些只是一些例子,还有许多其他可能的情况。
答案 1 :(得分:-1)
我更喜欢,使用.models导入,因为这是获取模型对象的简单方法 但是如果你使用元类,也许是get_model,那将是最好的选择。
def get_model(self, app_label, model_name=None):
"""
Returns the model matching the given app_label and model_name.
As a shortcut, this function also accepts a single argument in the
form <app_label>.<model_name>.
model_name is case-insensitive.
Raises LookupError if no application exists with this label, or no
model exists with this name in the application. Raises ValueError if
called with a single argument that doesn't contain exactly one dot.
"""
self.check_models_ready()
if model_name is None:
app_label, model_name = app_label.split('.')
return self.get_app_config(app_label).get_model(model_name.lower())
也许这个SO POST也可以提供帮助。