Django和Python - 使用变量值作为模型名称
在一个叫做 object_type 的变量里,我存储了一些值,比如 Profile(个人资料)或 Company(公司),这些都是应用程序中可用的模型名称。这两个模型都有一个叫做 uuid 的字段。
我需要做的事情类似于这个:
get_object_or_404(object_type, uuid=uuid_from_request)
我该如何把 object_type 的值(个人资料或公司)传递过去,以便查询到正确的模型呢?
2 个回答
1
在Django中,所有的模型类型都存储在一个神奇的缓存里。所以你可以利用这个缓存来获取模型类型,方法如下:
from django.db.models.loading import get_model
Model = get_model("your_app_name", "Profile")
get_object_or_404(object_type, uuid=uuid_from_request)
3
可以考虑使用一个字典,把模型的名字和对应的模型类进行关联:
object_types = {'Profile': Profile, 'Company': Compnay}
...
get_object_or_404(object_types[object_type], uuid=uuid_from_request)
或者可以使用getattr
这个函数:
import app.models
get_object_or_404(getattr(app.model, object_type), uuid=uuid_from_request)