django:从模型的实例中获取模型的最佳实践方式
说my_instance
是模型MyModel
。
我正在寻找一个好办法:
my_model = get_model_for_instance(my_instance)
我还没有find任何真正直接的方法来做到这一点。 到目前为止,我已经想出了这个:
from django.db.models import get_model my_model = get_model(my_instance._meta.app_label, my_instance.__class__.__name__)
这可以接受吗? 它甚至是一个确定的,最好的做法吗?
还有_meta.object_name
似乎与__class__.__name__
相同。 可以? 好还是坏? 如果是这样,为什么?
另外,如果应用程序标签在项目范围内多次出现,例如'django.contrib.auth'中的'auth',并且还有'myproject.auth',我怎么知道我正在获取正确的模型?
这种情况会使get_model
不可靠吗?
感谢任何提示/指针和经验分享!
my_model = type(my_instance)
为了certificate这一点,你可以创build另一个实例:
my_new_instance = type(my_instance)()
这就是为什么没有直接的方法,因为python对象已经有了这个function。
更新…
我喜欢marcinn使用type(x)
的回应 。 这与原来的答案( x.__class__
)是一样的,但我更喜欢使用函数来访问魔术属性。 以这种方式,我更喜欢使用vars(x)
len(x)
到x.__len__
, len(x)
到x.__len__
等等。
更新了2 …
对于延迟实例(由@Cerin在注释中提到),您可以通过instance._meta.proxy_for_model
访问原始类。
my_new_instance = type(my_instance)()