【问题标题】:Django Filters 'str' object has no attribute '_meta'Django过滤器'str'对象没有属性'_meta'
【发布时间】: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 中。现在也发布了完整的跟踪

标签: python html django


【解决方案1】:

更新: 在堆栈跟踪中,它说obj._meta.get_field(field), 'verbose_name')objstr,所以在行中:

      <th>{{ object_list|verbose_name:'field:name' }}</th>

object_liststr。请注意,您没有在上下文中设置任何名为 object_list 的内容 - 因此将其设置为空字符串。

我认为您应该传递样品订单并使用它而不是object_list


原答案:

根据您发布的错误,您视图的响应不是HttpResponse,而是str,这就是您收到此错误的原因。

另一件事,我假设您想在视图中呈现 pick_list.html 而不是 filter_list.htmlfilter_list.html 没有扩展 base.html 的事实表明您不是从这个视图而是从另一个视图得到错误。

【讨论】:

  • 你是对的 - 我将 filter_list.html 切换为 pick_list.html 并忘记在帖子中更新它...该错误是由于使用 pick_list.html
猜你喜欢
  • 1970-01-01
  • 2021-04-02
  • 1970-01-01
  • 2021-09-09
  • 2022-09-23
  • 2015-02-28
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
相关资源
最近更新 更多