gpt4 book ai didi

django:从该模型的实例获取模型的最佳实践方法

转载 作者:行者123 更新时间:2023-11-28 19:33:34 27 4
gpt4 key购买 nike

my_instance 是模型 MyModel
我正在寻找一个好的方法:

my_model = get_model_for_instance(my_instance)

我还没有找到任何真正直接的方法来做到这一点。到目前为止,我想出了这个:

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)

为了证明这一点,您可以创建另一个实例:

my_new_instance = type(my_instance)()

这就是为什么没有直接的方法,因为 python 对象已经具有此功能。

更新...

我喜欢 marcinn's response使用 type(x)。这与原始答案使用的相同 (x.__class__),但我更喜欢使用函数而不是访问魔法属性。通过这种方式,我更喜欢使用 vars(x) 而不是 x.__dict__len(x) 而不是 x.__len__等等。

更新了 2...

对于延迟实例(@Cerin 在评论中提到),您可以通过 instance._meta.proxy_for_model 访问原始类。

关于django:从该模型的实例获取模型的最佳实践方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2064480/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com