You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过apps.get_model从多个Django应用中获取模型?

解决办法

apps.get_model() 方法的第一个参数仅接受单个应用名称字符串,无法直接传入列表,这就是你触发TypeError: unhashable type: 'list'错误的原因。以下是针对多应用模型获取需求的可行方案:

方案一:遍历应用列表批量获取同名称模型

如果目标应用下需要获取的模型名称一致(比如都叫TargetModel),可以通过循环遍历应用列表逐个获取:

from django.apps import apps

app_list = ['masters', 'dockets']
target_model_name = 'TargetModel'
collected_models = []

for app_label in app_list:
    try:
        model = apps.get_model(app_label=app_label, model_name=target_model_name)
        collected_models.append(model)
    except LookupError:
        # 处理应用中不存在目标模型的异常情况
        print(f"应用 {app_label} 未找到模型 {target_model_name}")

方案二:按应用-模型映射关系获取不同模型

如果不同应用需要获取的模型名称不同,可以用字典存储对应关系后遍历处理:

from django.apps import apps

app_model_mapping = {
    'masters': 'MasterDataModel',
    'dockets': 'DocketRecordModel'
}
collected_models = {}

for app_label, model_name in app_model_mapping.items():
    try:
        model = apps.get_model(app_label=app_label, model_name=model_name)
        collected_models[app_label] = model
    except LookupError:
        print(f"应用 {app_label} 未找到模型 {model_name}")

关键说明

  • apps.get_model() 内部会通过app_label哈希查找对应应用配置,而列表属于不可哈希类型,因此直接传入列表会报错。
  • 加入try-except捕获LookupError,可以避免单个应用/模型不存在导致整个流程中断,提升代码健壮性。

内容的提问来源于stack exchange,提问作者Rahul Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 04:05:26