首页 文章

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

提问于
浏览
2

我有一个问题,在模型名称中使用变量,我想采取这个命令:

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 / etc / 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”i n get_response 132. response = wrapped_callback(request,* callback_args,** callback_kwargs)IntegrationExtraction 188中的文件“c:\ git \ ATH_intranet \ etl \ views.py”.importation.ImportationTableTemporaire(fichier)文件“c:\ git \ ATH_intranet在ImportationTableTemporaire 112中的\ etl \ class_perso.py“.getattr(models,model_name).objects.all() . delete()异常类型:/ etl / integration / Exception中的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 回答

  • 0
    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
    

相关问题