unicode' 对象没有 '_meta' 属性

2 投票
2 回答
6187 浏览
提问于 2025-04-17 20:43

我正在尝试创建一个视图,让用户从下拉菜单中选择一个选项,提交后返回一些数据。具体来说,他们会从数据库中的模型中选择,然后返回该类的所有实例。我正在使用django-tables2来输出数据,这样数据就可以排序,但这正是我遇到的问题。

Views.py

def output_form(request):
    results = None
    if request.GET.get('browse'):
        selection = request.GET.get('browse')

        class ModelTable(tables.Table):
            class Meta:
                model = selection

        results = ModelTable(selection.objects.all())
        RequestConfig(request, paginate={"per_page": 3}).configure(results)

    return render(request, 'projectdb/output.html', {
        'results': results,
})

HTML

<form method="GET">

    <select name="browse">

        <option>Model1</option>

        <option>Model2</option>

    </select>

    <input type="submit" value="Submit" />

</form><br/><br/>

    {% if results != None %}
        {% render_table results %}
    {% endif %}

出现的错误和标题一样:

'unicode'对象没有'_meta'属性

我尝试将'选择'的unicode转换为字符串,但基本上抛出了相同的错误(str没有'_meta'属性)。

我非常感激任何帮助。

编辑:为了更清楚,我想实现的目标是:

用户从下拉菜单中选择模型 ---> 选定的模型以某种方式传递给表格 ---> 表格被实例化并返回到下拉菜单下方的页面,显示选定模型的数据

2 个回答

0

也许你想做的是把你的 selection 从一个字符串转换成一个模型类。要做到这一点,可以使用 django.db.models.get_model 这个函数,比如:

selected_model = get_model('myapp', selection)

在我看来,像你这样动态定义表的类并不会影响代码的可读性。

1

model 属性应该指向 Django 的模型类。

但是在 output_form 这个函数里,selection 其实是引用了 request.GET.get('browse'),这实际上是一个 str 类型的对象。

class ModelTable(tables.Table):
    class Meta:
        model = selection # <----

model 属性改成正确指向模型类。

顺便提一下,把 ModelTable 类的定义移到视图函数外面。

撰写回答