Re: Views.py & queryset

17 views
Skip to first unread message

James Schneider

unread,
Jun 2, 2016, 3:53:02 AM6/2/16
to django...@googlegroups.com


On Wed, Jun 1, 2016 at 9:44 AM, Franck <was...@gmail.com> wrote:
Hello,

Sorry first project...

I can run :  Test.objects.filter(dateregister__contains='2016').count()    in manage.py shell, result is ok.
In template, {{ test.count }} works well, but I tried {{ test.filter(dateregister__contains='2016').count() }} without success.
I can't use queryset directly in the template ?  (need to modify views.py ?)

In most cases, you can't (and don't want to) use a queryset directly in the template. That type of logic usually ends up in the view. The view is responsible for preparing the data, whereas the template is responsible for formatting the data provided by the view. 

The reason that {{ test.count }} works is because you are storing a queryset in the context, rather than the actual object (or list of objects in this case). There are perfectly valid use cases for doing so, but keep in mind there is a difference between a queryset and an actual object or list of objects. If you use a queryset, you'll incur a database hit every time you refer to that variable in the template, which is likely not what you want. A notable exception is when looping over the queryset.

I'd recommend reading up on the template language and becoming familiar with the (deliberate) restrictions on the template language: https://docs.djangoproject.com/en/1.9/ref/templates/language/#variables

-James

Reply all
Reply to author
Forward
0 new messages