Formulario Django para consultar base de datos (modelos)

Así que quiero crear un formulario súper básico con un solo campo de entrada que se utilizará para consultar mi base de datos.

Mi modelo ( models.py ) es la siguiente:

 from django.db import models class Book(models.Model): uid = models.IntegerField(primary_key=True) title = models.CharField(max_length=30) class Meta: db_table = u'books' 

forms.py :

 from django import forms from myapp.models import Book class EnterIDForm(forms.form): book_id = forms.CharField() # add a custom clean function to validate that the user input # is a valid book ID def clean_book_id(self): try: book_id = int(self.cleaned_data["book_id"]) except: book_id = None if book_id and Book.objects.filter(uid=book_id).count(): return book_id else: raise forms.ValidationError("Please enter a valid book ID number.") 

views.py :

 from django.shortcuts import render_to_response from myapp.models import Book def form_view(request): if request.method == "POST": # the user has submitted the form, see if we have a book book_id_form = EnterIDForm(request.POST) # instantiate our form class with the user data if book_id_form.is_valid(): # if our form is valid, then we have a book_id that works: the_book = Book.objects.get(uid=book_id_form.cleaned_data["book_id"]) return render_to_response("book_template.html", { "the_book": the_book }, context_instance=RequestContext(request)) # if the form wasn't valid, it will fall through to the other return statement. else: # If the user didn't submit a form, instantiate a blank one. book_id_form = EnterIDForm() return render_to_response("form_template.html", { "book_id_form": book_id_form }, context_instance=RequestContext(request)) 

Quiero que el campo de entrada recopile el “uid” del usuario y muestre todos los datos de la instancia del modelo de libro, donde uid es un libro en la base de datos.

Comprendo cómo el formulario está vinculado con la vista y las plantillas posteriores, pero parece que no logro que funcione.

He buscado sin cesar en el sitio de Django y en muchos otros recursos un ejemplo del que puedo aprender, pero nada.

¿A alguien le importa ayudarme?

Gracias.

Puedes hacer una simple búsqueda aquí. No necesita ninguna llamada POST o creación de formulario. Sin embargo, si desea crear un formulario, esto debería indicar la dirección correcta.

Intenta algo como esto:

search.html:

 
Search Notecards:

views.py:

 from myapp.models import Book from django.template import RequestContext from django.shortcuts import render_to_response def search(request): query = request.GET.get('q') try: query = int(query) except ValueError: query = None results = None if query: results = Book.objects.get(uid=query) context = RequestContext(request) return render_to_response('results.html', {"results": results,}, context_instance=context) 

resultados.html:

 {% if results %} {% for result in results %} {{ result.uid }} {{ result.xxxx }} {{ result.xxxx }} {% endfor %} {% else %} 

Please enter a valid UID

Search Notecards:
{% endif %}