getattr - 异常值:模块 'django.db.models' 没有属性 'model_name''

Posted

技术标签:

【中文标题】getattr - 异常值:模块 \'django.db.models\' 没有属性 \'model_name\'\'【英文标题】:getattr - Exception Value: module 'django.db.models' has no attribute 'model_name''getattr - 异常值:模块 'django.db.models' 没有属性 'model_name'' 【发布时间】:2017-12-26 09:13:50 【问题描述】:

我在模型名称中使用变量时遇到问题,我想使用这个命令:

MyVar.objects.all().delete()

同样地,我必须解决这个问题:

class MyCsvModel(CsvDbModel):
            class Meta:
                dbModel = MyVar
                delimiter = delimiter_csv

这些动作在类的方法上。 并且变量是在这里方法上创建的。

对不起我的英语,我是初学者......

编辑:

我的代码:

from etl.models import MvmtjExportTemps, MvmtjExport
from django.db import models

[...]
model_name = self.table_temporaire[self.numero_edi]
getattr(models, model_name).objects.all().delete()


class MyCsvModel(CsvDbModel):
    class Meta:
        dbModel = getattr(models, model_name)
        delimiter = delimiter_csv

我有这个结果:

环境:

请求方法:GET 请求 URL: http://127.0.0.1:8000/etl/integration/

Django 版本:1.8.18 Python 版本:3.6.1 已安装的应用程序: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'pec', 'topo'、'bootstrap3_datetime'、'todo_app'、'debug_toolbar'、'bi'、 'etl'] 已安装的中间件: ['debug_toolbar.middleware.DebugToolbarMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware']

追溯:文件 “C:\git\ATH_intranet\env_p3\lib\site-packages\django\core\handlers\base.py” 在 get_response 132. response = Wrapped_callback(request, *callback_args, **callback_kwargs) 集成提取中的文件“c:\git\ATH_intranet\etl\views.py” 188. importation.ImportationTableTemporaire(fichier) 文件 ImportationTableTemporaire 中的“c:\git\ATH_intranet\etl\class_perso.py” 112. getattr(models, model_name).objects.all().delete()

异常类型:/etl/integration/ 处的 AttributeError 异常值: 模块“django.db.models”没有属性“MvmtjExportTemps”

编辑 2:

最后我需要像这样在 import 和 getattr 中添加位置:

import etl.models

        #vidange table temporaire
        model_name = self.table_temporaire[self.numero_edi]
        getattr(etl.models, model_name).objects.all().delete()

        # creation de la class correspondant a la table temporaire

        class MyCsvModel(CsvDbModel):
            class Meta:
                dbModel = getattr(etl.models, model_name)
                delimiter = delimiter_csv

【问题讨论】:

【参考方案1】:
import models 
model_name = "X"

getattr(models, model_name).objects.all().delete()

class MyCsvModel(CsvDbModel):
            class Meta:
                dbModel = getattr(models, model_name)
                delimiter = delimiter_csv

【讨论】:

我一直在寻找,但我收到此消息:没有名为“模型”的模块 很抱歉你有这个消息模块'django.db.models'没有属性'MvmtjExportTemps',我已经添加了“从app.models import *” 你应该使用 from django.db import models 拜托,我已经更新了我的帖子。你对我的问题有最后的想法吗? 不要使用“从 django.db 导入模型”。这。使用“导入模型”

以上是关于getattr - 异常值:模块 'django.db.models' 没有属性 'model_name''的主要内容,如果未能解决你的问题,请参考以下文章

Django 使用getattr() 方法获取配置文件的变量值

Python getattr() 函数

为啥我不能将 __getattr__ 与 Django 模型一起使用?

高级使用

__getattr__ 在模块上

Django使用orm模块时想看多对对数据关系的配置