【问题标题】:Using a variable as a Model Lookup使用变量作为模型查找
【发布时间】:2014-02-13 15:29:42
【问题描述】:

我将一个变量传递给我的视图,它是要查询的模型的名称。

model_name = 'application'
assets = model_name.objects.all()

我收到 unicode 对象没有 objects 属性的错误,这是有道理的,因为我的调试器按预期显示了 model_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})

效果很好。我尝试了所有我能想到的 * 和 ** 组合,以及为了一致性起见将其包装在 for model_name in [model_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)

【问题讨论】:

  • 请发布您收到的完整错误回溯。
  • 好吧...我做到了。在更好地学习调试自己方面,你能告诉我你希望在那里找到我原来的帖子中没有包含的内容吗?
  • 我对你收到的SyntaxErrors 更感兴趣。
  • 好的,改为其中之一。

标签: python django


【解决方案1】:
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>, ... ]

【讨论】:

  • 漂亮!谢谢!这听起来可能很愚蠢,但是关于我如何自己找到它的任何有用的提示?我用谷歌搜索了很多。
  • 如果你用谷歌搜索“django model class from string”之类的东西,你会很容易找到一些相关的 SO 问题,例如stackoverflow.com/q/4881607/202168 & stackoverflow.com/q/411810/202168
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多