Python 使用变量作为模型查找

Python 使用变量作为模型查找,python,django,Python,Django,我正在向视图传递一个变量,该变量是要查询的模型的名称 model_name = 'application' assets = model_name.objects.all() 我得到一个错误,unicode对象没有对象属性,这是有道理的,因为我的调试器按预期显示model\u name=u'application' 我认为这与*args和**kwargs有关(我是新来的,但我想我得到了),特别是因为在我的代码的其他地方我有: role_set = ['primary_tech', 'prima

我正在向视图传递一个变量,该变量是要查询的模型的名称

model_name = 'application'
assets = model_name.objects.all()
我得到一个错误,unicode对象没有
对象
属性,这是有道理的,因为我的调试器按预期显示
model\u name=u'application'

我认为这与*args和**kwargs有关(我是新来的,但我想我得到了),特别是因为在我的代码的其他地方我有:

role_set = ['primary_tech', 'primary_biz', 'backup_tech', 'backup_biz']
   for role in role_set:
       records_to_change = Item.objects.filter(**{role:old_owner})
这很好用。为了一致性起见,我尝试了我能想到的*和**的每一种组合,并在[model\u name]中将其包装为model\u name的
,但所有这些都给了我一个语法错误。我错过了什么

Python 2.7,Django 1.5

回溯:

Environment:


Request Method: GET
Request URL: http://localhost:8000/application/all/

Django Version: 1.6.1
Python Version: 2.7.2
Installed Applications:
('suit',
 'south',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.redirects',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'rest_framework',
 'ldap_sync',
 'crispy_forms',
 'ownership.apps.Catalog',
 'ownership.apps.Assets',
 'ownership.apps.Shared',
 'ownership.libs.display',
 'django_tables2',
 'haystack',
 'autocomplete_light',
 'reversion',
 'debug_toolbar')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.contrib.redirects.middleware.RedirectFallbackMiddleware',
 'django.middleware.transaction.TransactionMiddleware',
 'reversion.middleware.RevisionMiddleware',
 'ownership.libs.shibboleth.CustomHeaderMiddleware',
 'ownership.libs.middleware.LoginRequiredMiddleware',
 'debug_toolbar.middleware.DebugToolbarMiddleware')


Traceback:
File "/Users/nicholsp/.virtualenvs/ownership/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  90.                 response = middleware_method(request)
File "/Users/nicholsp/.virtualenvs/ownership/lib/python2.7/site-packages/django/utils/importlib.py" in import_module
  40.         __import__(name)
File "/Users/nicholsp/code/ownership/ownership/urls.py" in <module>
  27.     url(r'^', include('ownership.apps.Assets.urls'), name='home'),
File "/Users/nicholsp/.virtualenvs/ownership/lib/python2.7/site-packages/django/conf/urls/__init__.py" in include
  26.         urlconf_module = import_module(urlconf_module)
File "/Users/nicholsp/.virtualenvs/ownership/lib/python2.7/site-packages/django/utils/importlib.py" in import_module
  40.         __import__(name)
File "/Users/nicholsp/code/ownership/ownership/apps/Assets/urls.py" in <module>
  3. import views

Exception Type: SyntaxError at /application/all/
Exception Value: invalid syntax (views.py, line 132)
环境:
请求方法:获取
请求URL:http://localhost:8000/application/all/
Django版本:1.6.1
Python版本:2.7.2
已安装的应用程序:
(“西装”,
“南方”,
“django.contrib.auth”,
“django.contrib.contenttypes”,
“django.contrib.sessions”,
“django.contrib.sites”,
'django.contrib.redirects',
“django.contrib.messages”,
“django.contrib.staticfiles”,
“django.contrib.admin”,
“rest_框架”,
“ldap_同步”,
“脆皮形式”,
“所有权.应用程序.目录”,
“所有权.应用程序.资产”,
“所有权.应用程序.共享”,
'所有权.libs.display',
“django_表2”,
“干草堆”,
“自动完成灯”,
“回归”,
“调试工具条”)
已安装的中间件:
('django.middleware.common.CommonMiddleware',
“django.contrib.sessions.middleware.SessionMiddleware”,
“django.middleware.csrf.CsrfViewMiddleware”,
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.contrib.redirects.middleware.RedirectFallbackMiddleware',
'django.middleware.transaction.TransactionMiddleware',
“reversion.middleware.RevisionMiddleware”,
'ownership.libs.shibboleth.customheadermiddware',
'ownership.libs.middleware.LoginRequiredMiddleware',
'debug_toolbar.middleware.debugtoolbar middleware')
回溯:
get_响应中的文件“/Users/nicholsp/.virtualenvs/ownership/lib/python2.7/site packages/django/core/handlers/base.py”
90响应=中间件\方法(请求)
导入模块中的文件“/Users/nicholsp/.virtualenvs/ownership/lib/python2.7/site packages/django/utils/importlib.py”
40.         __导入(名称)
文件“/Users/nicholsp/code/ownership/ownership/url.py”
27url(r'^',包括('ownership.apps.Assets.url'),name='home'),
include中的文件“/Users/nicholsp/.virtualenvs/ownership/lib/python2.7/site packages/django/conf/url/_init__.py”
26urlconf_模块=导入_模块(urlconf_模块)
导入模块中的文件“/Users/nicholsp/.virtualenvs/ownership/lib/python2.7/site packages/django/utils/importlib.py”
40.         __导入(名称)
文件“/Users/nicholsp/code/ownership/ownership/apps/Assets/url.py”
3.导入视图
异常类型:SyntaxError at/application/all/
异常值:无效语法(views.py,第132行)
从django.db.models导入get\u model
类MyModel(models.Model):
...
model\u class=get\u model('myapp','mymodel')
打印型号\u类。\u名称__
“我的模型”
model_class.objects.all()
[, , ... ]

请发布您得到的完整错误回溯。好的。。。是的。为了更好地学习调试自己,你能告诉我你希望在那里找到什么我在原来的帖子中没有提到的吗?我对你得到的
SyntaxError
s更感兴趣。好吧,改成其中一个。很漂亮!非常感谢。这听起来可能很愚蠢,但有没有任何有用的提示,说明我是如何自己发现这一点的?如果你在谷歌上搜索“django model class from string”之类的东西,你会很容易找到一些相关的SO问题,例如&
from django.db.models import get_model

class MyModel(models.Model):
   ...

model_class = get_model('myapp', 'mymodel')
print model_class.__name__
'MyModel'

model_class.objects.all()
[<MyModel: 1>, <MyModel: 2>, <MyModel: 3>, ... ]