【问题标题】:Django : AttributeError: 'unicode' object has no attribute 'objects'Django:AttributeError:'unicode'对象没有属性'objects'
【发布时间】:2015-11-15 15:06:10
【问题描述】:

views.py:

def submit_upload(request,):

    if request.method == 'POST': 
        form = AerialForm(request.POST)
        id_key = form.data['id_key']
        year_id = form.data['year_id']
        year = Year.objects.get(year_id=year_id)

        series_id = form['series_id'].value()
        q_series = Series.objects.get(series_id=series_id)
        s_name = q_series.series.lower()

        table_name = s_name+'_photocenter_'+year.year_name

        query = table_name.objects.filter(ID_KEY=id_key)

从我上面的代码中,我想从query 中获取值,当我运行代码时,我得到了这个错误:

    query = table_name.objects.filter(ID_KEY=id_key)

AttributeError: 'unicode' object has no attribute 'objects'

【问题讨论】:

  • 你有哪个版本的 Django?

标签: python django unicode


【解决方案1】:

对动态负载模型使用:

Django 1.7+

from django.apps import apps
Model = apps.get_model(app_label='your_app_name', model_name=table_name)

老 Django

from django.db.models.loading import get_model
Model = get_model('your_app_name', table_name)

通用

try:
    from django.apps import apps
    Model = apps.get_model(app_label='your_app_name', model_name=table_name)
except ImportError:
    from django.db.models.loading import get_model
    Model = get_model('your_app_name', table_name)

【讨论】:

  • 我试过你的代码,我得到了这个错误。没有名为应用程序的模块
【解决方案2】:

欢迎来到 Stackoverflow :)

table_name 应该是型号名称。在你的情况下,它只是一个 unicode 对象

你需要类似的东西(感谢 Tomasz)

from django.apps import apps

model_name = '%s_photocenter_%s' % (s_name, year.year_name)
YourModel = apps.get_model(app_label='your_app_name', model_name=model_name)

【讨论】:

  • 我知道你的意思,但我创建了这个变量:table_name = s_name+'photocenter'+year.year_name 以获得与我的模型名称相同的名称。
猜你喜欢
  • 1970-01-01
  • 2013-01-27
  • 2020-01-09
  • 2023-03-03
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-15
相关资源
最近更新 更多