【发布时间】:2022-01-17 11:35:03
【问题描述】:
我正在创建一个页面,允许用户过滤数据集、点击搜索并查看下面的结果更新。我收到以下属性错误:“str”对象没有属性“_meta”,我无法弄清楚为什么会这样。任何帮助表示赞赏
views.py:
from django.shortcuts import render, redirect
from django.urls import reverse_lazy, reverse
from django_filters.views import FilterView
import django_filters
from .models import Book, Lead, File, Pick
from .filters import PickFilter
from .forms import BookForm, LeadForm, FileForm, PickForm
from cms.ajax import (AjaxCreateView, AjaxDetailView, AjaxUpdateView, AjaxDeleteView, AjaxFilesUpload)
from cms.views import CoreListView
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.decorators import login_required
def week(request):
#orders = Pick.objects.get(id=pk_test)
orders = Pick.objects.all()
#orders = week.order_set.all()
myFilter = PickFilter(request.GET, queryset=orders)
orders = myFilter.qs
context = {'week':week, 'orders':orders, 'myFilter':myFilter}
return render(request, 'app/pick_list.html',context)
pick_list.html:
{% extends 'base.html' %}
{% load cms_tags %}
{% block title %} {{ title }} · {{ block.super }} {% endblock title %}
{% block content %}
<div style="font-size:24px">
{{ title }}
</div>
<div style="font-size:14px; margin-bottom:15px">
Click on the arrows on the right of each contestant and drag them up or down to reorder them based on how far you think they are going to go.
</div>
<form method="get">
{{ myFilter.form }}
<button type="submit">Search</button>
</form>
<ul>
<table class="table table-hover" id="table-ajax" style="background-color: white;">
<thead style="background-color: #de5246; color:white; border-bottom:white">
<tr>
{% comment %} <th></th> {% endcomment %}
<th style="width: 50px; text-align: center;"></th>
<th>{{ object_list|verbose_name:'field:name' }}</th>
<th>{{ object_list|verbose_name:'field:hometown' }}</th>
<th>{{ object_list|verbose_name:'field:occupation' }}</th>
<th>{{ object_list|verbose_name:'field:age' }}</th>
<th>Progress</th>
<th style="width: 160px; text-align: center;">Rank</th>
</tr>
</thead>
<tbody class="order" data-url="{% url 'cms:reorder' model_name %}">
{% include 'app/filter_list.html' %}
</tbody>
</table>
{% endblock %}
filter_list.html:
{% load static %}
{% load cms_tags %}
{% for order in orders %}
<tr id="{{ order.id }}">
<td><img src="http://127.0.0.1:8000/media/files/{{ order.photo }}" width="50"/></td>
<td><a href="" title="Leads" style="text-decoration: none">{{ order.name }}</a></td>
<td>{{ order.hometown }}</td>
<td>{{ order.occupation }}</td>
<td>{{ order.age }}</td>
<td>
<div class="progress">
<div class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" aria-valuenow="{{ order.age }}" aria-valuemin="0" aria-valuemax="100" style="width: 75%"></div>
</div>
</td>
<td style="text-align: center;">
<a href="" class="btn btn-sm border-0 reorder" title="Reorder">
<i class="fa fa-sort text-secondary"></i></a>
</td>
</tr>
{% empty %}
<tr class="table-warning nosort">
<td colspan="100%" class="text-center"><small class="text-muted">No {{ model_verbose_name_plural|lower }}</small>
</td>
</tr>
{% endfor %}
<tr class="table-light table-sm nosort">
<td colspan="100%"><small class="text-muted">Total rows: {{ orders.count }}</small></td>
</tr>
base.html
{% load static %}
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="https://pro.fontawesome.com/releases/v5.10.0/css/all.css"
integrity="sha384-AYmEC3Yw5cVb3ZcuHtOA93w35dYTsvhLPVnYs9eStHfGJvOvKxVfELGroGkvsg+p" crossorigin="anonymous" />
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.css"
integrity="sha512-vKMx8UnXk60zUwyUnUPM3HbQo8QfmNx7+ltw8Pm5zLusl1XIfwcxo8DbWCqMGKaWeNxWA8yrx5v3SaVpMvR3CA=="
crossorigin="anonymous" referrerpolicy="no-referrer" />
<link href="{% static 'css/base.css' %}" rel="stylesheet">
{% block extracss %}{% endblock %}
<title>{% block title %}ccc{% endblock title %}</title>
</head>
<body style='background-color:#e7e7e7;'>
{% include 'include/navbar.html' %}
<div class='row' style='background-color: #e7e7e7;'>
<div class='column' style='padding-left:35px;padding-top:22px ;float: left; width:17%;background-color: #f1f1f1;'>
<ul class="nav flex-column">
<li class="nav-item">
<a class="nav-link" style="color:black" aria-current="page" href="#"><img src="{% static 'img/pick_icon.svg' %}" width="21" height="21" alt="Logo" class="mr-2 mt-n1"></i> Picks</a>
</li>
<li class="nav-item">
<a class="nav-link" style="color:black" aria-current="page" href="#"><img src="{% static 'img/forum_icon.svg' %}" width="21" height="21" alt="Logo" class="mr-2 mt-n1"></i> Forum</a>
</li>
<li class="nav-item">
<a class="nav-link" style="color:black" aria-current="page" href="#"><img src="{% static 'img/leader_icon.svg' %}" width="21" height="21" alt="Logo" class="mr-2 mt-n1"></i> Leaderboard</a>
</li>
<li class="nav-item">
<a class="nav-link" style="color:black" aria-current="page" href="#"><img src="{% static 'img/bingo_icon.svg' %}" width="21" height="21" alt="Logo" class="mr-2 mt-n1"></i> Bingo </a>
</li>
</ul>
</div>
<div class='column' style='float: right; width:82%;background-color: #e7e7e7; padding:25px'>
{% block content %}{% endblock content %}
</div>
</div>
{% include 'cms/modal/modal.html' %}
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.js"
integrity="sha512-VEd+nq25CkR676O+pLBnDW09R7VQX9Mdiij052gVCp5yVH3jGtH70Ho/UUv4mJDsEdTvqRCFZg0NKGiojGnUCw=="
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="{% static 'cms/js/ajax.js' %}"></script>
{% block extrajs %}{% endblock extrajs %}
</body>
</html>
错误:
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/picks/filter/
Django Version: 3.2.6
Python Version: 3.8.7
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'account',
'cms',
'app',
'widget_tweaks',
'django_cleanup',
'bootstrap_datepicker_plus']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Template error:
In template C:\Users\New User\Downloads\django-modal-ajax-crud-main\django-modal-ajax-crud-main\templates\base.html, error at line 0
'str' object has no attribute '_meta'
1 : {% load static %}
2 : <!doctype html>
3 : <html lang="en">
4 : <head>
5 : <meta charset="utf-8">
6 : <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
7 : <link rel="stylesheet" href="https://pro.fontawesome.com/releases/v5.10.0/css/all.css"
8 : integrity="sha384-AYmEC3Yw5cVb3ZcuHtOA93w35dYTsvhLPVnYs9eStHfGJvOvKxVfELGroGkvsg+p" crossorigin="anonymous" />
9 : <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
10 :
Traceback (most recent call last):
File "C:\Users\New User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\New User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\New User\Downloads\django-modal-ajax-crud-main\django-modal-ajax-crud-main\app\views.py", line 146, in week
return render(request, 'app/pick_list.html',context)
File "C:\Users\New User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\shortcuts.py", line 19, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "C:\Users\New User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\template\loader.py", line 62, in render_to_string
return template.render(context, request)
File "C:\Users\New User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\template\backends\django.py", line 61, in render
return self.template.render(context)
File "C:\Users\New User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\template\base.py", line 170, in render
return self._render(context)
File "C:\Users\New User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\template\base.py", line 162, in _render
return self.nodelist.render(context)
File "C:\Users\New User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "C:\Users\New User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "C:\Users\New User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\template\loader_tags.py", line 150, in render
return compiled_parent._render(context)
File "C:\Users\New User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\template\base.py", line 162, in _render
return self.nodelist.render(context)
File "C:\Users\New User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "C:\Users\New User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "C:\Users\New User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\template\loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "C:\Users\New User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "C:\Users\New User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "C:\Users\New User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\template\base.py", line 988, in render
output = self.filter_expression.resolve(context)
File "C:\Users\New User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\template\base.py", line 698, in resolve
new_obj = func(obj, *arg_vals)
File "C:\Users\New User\Downloads\django-modal-ajax-crud-main\django-modal-ajax-crud-main\cms\templatetags\cms_tags.py", line 60, in get_verbose_name
obj._meta.get_field(field), 'verbose_name') else 'name'
Exception Type: AttributeError at /picks/filter/
Exception Value: 'str' object has no attribute '_meta'
视图的回溯错误:
context
{'myFilter': <app.filters.PickFilter object at 0x04CC9FB8>,
'orders': <QuerySet [<Pick: Claire>, <Pick: Elizabeth>, <Pick: Cassidy>, <Pick: Eliza>, <Pick: Daria>, <Pick: Ency>, <Pick: Gabby>, <Pick: Genevieve>, <Pick: Hailey>, <Pick: Hunter>, <Pick: Hunter>]>}
myFilter
<app.filters.PickFilter object at 0x04CC9FB8>
orders
<QuerySet [<Pick: Claire>, <Pick: Elizabeth>, <Pick: Cassidy>, <Pick: Eliza>, <Pick: Daria>, <Pick: Ency>, <Pick: Gabby>, <Pick: Genevieve>, <Pick: Hailey>, <Pick: Hunter>, <Pick: Hunter>]>
request
<WSGIRequest: GET '/picks/filter/'>
【问题讨论】:
-
放入
base.html文件?这就是错误的来源.. -
哎呀,刚刚在帖子中分享了这个
-
你能放完整的堆栈跟踪吗?看起来您的回复不是正确的
HttpResponse,这让我认为它不是来自您发布的视图。 -
另外,您使用的是哪种
render方法?你可以把进口?如果是from django.shortcuts import render那你应该没问题 -
将我正在使用的导入添加到上面的 views.py sn-p 中。现在也发布了完整的跟踪