Mats_invasion
Mats_invasion

Reputation: 117

How to dealing with a 'str' object has no attribute '_meta' error?

So i have been looking at adding ratings functionality to my objects and decided to go with Agon-ratings https://github.com/eldarion/agon-ratings

i have followed their usage documentation <http://agon-ratings.readthedocs.org/en/latest/usage.html>
did this with my template,
{% extends "base.html" %}
{% load url from future %}
{% block title %}Don't you jus love easy food{% endblock %}
{% block content %}
{% load agon_ratings_tags %}
<br/>
<br/>

<div>

{% if found_entries %}
 <p>You searched for "{{ query_string }}".</p> 
 {% for restaurant in found_entries %}

 <div>
   <div>
    <table>
     <tr>
        <td>dxtcfyguvhyju</td>


      <td><a href="{% url 'f4l_menu' restaurant.id %}">{{ restaurant.restaurant_name }}</td></a>
     </tr>
     <tr>
      <td>Location</td>
      <td>{{restaurant.address}}</td>
     </tr>
    </table>

 {% endfor %}
{% overall_rating obj as the_overall_rating %}
<div class="overall_rating">{{ the_overall_rating }}</div>
<div id= "user_rating"></div>

{% endif %}
{% if query_string and not found_entries %}
 <p>No results found.</p>
{% else %}
 <p>Type a search query into the box above, and press "Submit" to search.</p>
{% endif %}
   </div>
  </div>
  <div style="clear: both;"></div>
 </div>
</div>
{% user_rating_js request.user obj %}
{% endblock %}

when i load my page get the, 'str' object has no attribute '_meta' I clearly dont understand where i went wrong. Btw am a beginner django developer developing my first django app

the traceback,

Template error:
In template /home/mats-invasion/projects/f4l/templates/public/search.html, error at line 31
   'str' object has no attribute '_meta'
   21 :         


   22 :       <td><a href="{% url 'f4l_menu' restaurant.id %}">{{ restaurant.restaurant_name }}</td></a>


   23 :      </tr>


   24 :      <tr>


   25 :       <td>Location</td>


   26 :       <td>{{restaurant.address}}</td>


   27 :      </tr>


   28 :     </table>


   29 :     


   30 :  {% endfor %}


   31 :  {% overall_rating obj as the_overall_rating %} 


   32 : <div class="overall_rating">{{ the_overall_rating }}</div>


   33 : <div id= "user_rating"></div>


   34 :  


   35 : {% endif %}


   36 : {% if query_string and not found_entries %}


   37 :  <p>No results found.</p>


   38 : {% else %}


   39 :  <p>Type a search query into the box above, and press "Submit" to search.</p>


   40 : {% endif %}


   41 :    </div>


Traceback:
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/home/mats-invasion/projects/f4l/f4l/f4l/views.py" in search
  64.   return render_to_response('public/search.html',context,context_instance=RequestContext(request))
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/shortcuts/__init__.py" in render_to_response
  20.     return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/template/loader.py" in render_to_string
  176.         return t.render(context_instance)
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/template/base.py" in render
  140.             return self._render(context)
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/test/utils.py" in instrumented_test_render
  62.     return self.nodelist.render(context)
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/template/base.py" in render
  823.                 bit = self.render_node(node, context)
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
  74.             return node.render(context)
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render
  123.         return compiled_parent._render(context)
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/test/utils.py" in instrumented_test_render
  62.     return self.nodelist.render(context)
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/template/base.py" in render
  823.                 bit = self.render_node(node, context)
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
  74.             return node.render(context)
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render
  123.         return compiled_parent._render(context)
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/test/utils.py" in instrumented_test_render
  62.     return self.nodelist.render(context)
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/template/base.py" in render
  823.                 bit = self.render_node(node, context)
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
  74.             return node.render(context)
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render
  62.             result = block.nodelist.render(context)
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/template/base.py" in render
  823.                 bit = self.render_node(node, context)
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
  74.             return node.render(context)
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render
  62.             result = block.nodelist.render(context)
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/template/base.py" in render
  823.                 bit = self.render_node(node, context)
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
  74.             return node.render(context)
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/template/defaulttags.py" in render
  281.                 return nodelist.render(context)
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/template/base.py" in render
  823.                 bit = self.render_node(node, context)
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
  74.             return node.render(context)
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/agon_ratings/templatetags/agon_ratings_tags.py" in render
  106.             ct = ContentType.objects.get_for_model(obj)
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/contrib/contenttypes/models.py" in get_for_model
  32.         opts = self._get_opts(model)
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/contrib/contenttypes/models.py" in _get_opts
  20.         return model._meta.concrete_model._meta

Exception Type: AttributeError at /search/
Exception Value: 'str' object has no attribute '_meta'

in the views.py,

def search(request):
    query_string=''
    found_entries=None
    search_fields=('delivery_territory',)
    option=request.REQUEST.get('deliveryType',None)
    if option== 'D':
        start_set=Restaurant.objects.filter(services='DEL')
    elif option == 'P':
        start_set = Restaurant.objects.filter(services='PCK')
    else:
        start_set=Restaurant.objects.all()
    if ('q' in request.GET) and request.GET['q'].strip():
        query_string= request.GET['q']
        entry_query= get_query(query_string,search_fields)
        found_entries= start_set.filter(entry_query).order_by('created_on')
    obj = Restaurant.objects.all()
    context={
        'query_string':query_string,
        'found_entries':found_entries,
        'obj':obj,
    }
    return render_to_response('public/search.html',context,context_instance=RequestContext(request))

Upvotes: 3

Views: 10703

Answers (2)

panjianom
panjianom

Reputation: 236

just change your 2 template tags into like this: {% overall_rating yourappmodel as the_overall_rating %} and {% user_rating_js request.user yourappmodel %}

Upvotes: 1

Anas
Anas

Reputation: 1861

It seems that obj is a string value. And not a model instance. Please verify the value of the obj variable.

Edit :

The explanation given in the usage documentation is for a detail view (having more or less a main object).

If you are willing to display a rating per restaurant in the found_entries you might have to do some changes. (If not please mention it)

The class overall_rating is hard-coded in this line. To be able to do a rating per restaurant in search results, you will have to do so changes.

Upvotes: 4

Related Questions