On Sun, Sep 25, 2011 at 9:00 PM, David <david.pull...@gmail.com> wrote:
> I'm new to Django, gone through the django book and some
> documentation, but I can't find how to do this or if it's possible.
>
> I have a model that lists documents with title and edition.  It also
> has a foreign key to an organization table.
>
> I'm trying to create a query form that first takes the name of the
> organization in one field, and they lets the user search by document
> title.  The idea is to only show results in the document search that
> are from the organization.  I'm not sure if this is something for the
> forms.py or if it's done in the view for the form.

It sounds like you're getting a little tangled over what processing
should be handled where.

A form retrieves inputs from the user. A query retrieves data from the
database. The view is a function that takes a request, from the user
and turns it into a response that can be rendered back to the user.

So - for your purposes, you need a form to retrieve from the user the
organization they want to search, and the title of the document to
search for:

class SearchForm(forms.Form):
    organization = forms.ModelField(Organization)
    search_term = forms.CharField(max_length=100)

i.e., a form that lets you select an organization, and provide a block
of text for searching.

Then, in your view, use the data from that form to issue a query:

def my_view(request):
    ...
    form = SearchForm(data=request.GET)
    if form.is_valid():
        organzation = form.cleaned_data['organization']
        search_term = form.cleaned_data]['search_term']
        results = Document.objects.filter(organization=organization,
title__icontains=search_term)
    ....

At this point, results will contain the list of documents that are
from the selected organization, and has a title that is a
case-insensitive partial match for the search term. If you want
different matching criteria, alter the __icontains query term.

The view requires a little more fleshing out, tool. Obviously, you'll
need to render `results` into a HTTPResponse. I've also assumed that
the query is being issued as a GET query -- which is possible, because
a search should be idempotent, but you *could* issue the search as a
POST, in which case the view handling will be slightly different. If
you're using the same view to present the original form *and* present
the results, you'll need to handle that case; you'll also need to
handle the case where the user doesn't provide a search term.

Filling in these extra bits is left as an exercise for the reader :-)
Hopefully with the form/query/view thing clarified, the rest will fall
into place. If it doesn't, feel free to ask.

Yours,
Russ Magee %-)

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to