Reputation: 117
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
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
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