>From a brief glance at the RTD (and assuming you are using CBV's), it looks
like you should create a standard ListView and then override get_queryset()
with the extra filter to narrow down the list of models retrieved:

http://django-taggit.readthedocs.org/en/latest/api.html#filtering

You can use a (?P<tag_slug>[\w-]+) or whatever you want to name it to
capture a URL parameter specifying the desired tag, and pull that parameter
when adding the filter in get_queryset().

Something like this:


def get_queryset(self):
    qs = super(ListViewName, self).get_queryset()
    return qs.filter(tags__name=self.kwargs.get('tag_slug', None))


That works for filtering via a single tag (which sounds like what you are
trying to do). A non-matching slug will return an empty list, and a missing
slug will return all of the models without tags (I presume). For multiple
tags, you should either accept GET or POST parameters from a form
submission, unless you come up with some funky regex to capture multiple
tags via the URL (not recommended), and modify the get_queryset() call to
use __in rather than =.

There shouldn't be any need to pass extra parameters to the view call. A
typical ListViewName.as_view() should suffice. Everything you need should
be gathered via a form submission or a URL kwarg.

Full disclosure, I haven't worked with django-taggit at all, so I could be
completely wrong.

For completeness in my answer, in the event that I'm wrong, you can allow
passing of extra arguments to the as_view() call by overriding the
__init__() method of the view and adding in the extra arguments to the
overridden method:


def __init__(self, request, qs, **kwargs):
    super(ListViewName, self)__init__(**kwargs) # call the regular
__init__() with the originally expected kwargs, notice that request and qs
are missing
    self.request = request #is this the view request? It should already be
available via self.request
    self.qs = qs


You may also want to look at django-filter or django-easyfilter to provide
a small form to allow users to search for tags, if needed.

HTH,

-James



On May 26, 2015 7:33 PM, "Lachlan Musicman" <[email protected]> wrote:

> Hola,
>
> I was planning on using Django taggit for tagging models.
>
> http://django-taggit.readthedocs.org
> https://github.com/alex/django-taggit
>
> I am trying to get some sort of CBV (eg lListView of model's with tag x)
> happening but it doesn't seem able to do this.
>
> The app's views.py
> https://github.com/alex/django-taggit/blob/develop/taggit/views.py
>
> has a tagged_object_list function, but I can't seem to get it working and
> can't find a test that might give me an indication.
>
> So I tried re-creating it in my own views.py and y equivalent to this line:
>
> return ListView.as_view(request, qs, **kwargs)
>
> keeps throwing errors like "ListView.as_view takes exactly 1 argument"
>
> And now I'm confused - this app is by Alex Gaynor, so I presume it's solid
> and I'm the one making the mistake.
>
> Can anyone give me an indication how either the taggit.views might be used
> or how I might implement something like ListView.as_view(request, qs, **
> kwargs)
>
> Cheers
> L.
>
> ------
> let's build quiet armies friends, let's march on their glass
> towers...let's build fallen cathedrals and make impractical plans
>
> - GYBE
>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/django-users.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/CAGBeqiPoEeEbpETfAmHq%3DAA2WkEHHbGO79NapXf8YAjA5y8nZQ%40mail.gmail.com
> <https://groups.google.com/d/msgid/django-users/CAGBeqiPoEeEbpETfAmHq%3DAA2WkEHHbGO79NapXf8YAjA5y8nZQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/CA%2Be%2BciXG_-WqbJ9MiAJAqRLGCJex9Db0bTJ0N2nH-Zv%3DmEJ5GA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to