unicode' 对象没有 '_meta' 属性
我正在尝试创建一个视图,让用户从下拉菜单中选择一个选项,提交后返回一些数据。具体来说,他们会从数据库中的模型中选择,然后返回该类的所有实例。我正在使用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
类的定义移到视图函数外面。