-
Notifications
You must be signed in to change notification settings - Fork 3
Prueba de concepto
Como espectador quiero poder buscar una obra y contactarme con el publicador para averiguar por la entrada
Primer paso
El usuario ingresa en el input del template la obra a buscar
Segundo paso
El pedido de búsqueda llega al objecto SearchView, que es el encargado de resolver el pedido y enviar un respuesta. Si el pedido no tiene resultados devuelve una una lista vacia, y si lo tiene devuelve la cantidad de resultados necesarios. En este objecto View podemos declara el modelo de objecto que se va a buscar y tambien el template al cual se va a redireccionar.
class SearchView(ListView):
model = PlayTheater
template_name = 'search.html'
def get_context_data(self, **kwargs):
search = self.request.GET.get("search_term", None)
self.object_list = PlayTheater.objects.filter(play_name__icontains=search)
context = super(SearchView, self).get_context_data(**kwargs)
return context
En la linea de abajo es donde se comunica con la base de datos y busca el pedido. Esto lo hace a través de los manager que tienen los objetos de django que extiende de Models, estos "objetitos" tienen consultas a la base predeterminadas como el filter, el get, el exists, etc.
self.object_list = PlayTheater.objects.filter(play_name__icontains=search)
Tercer paso
Después se devuelve los parámetros en el contexto para que los lea el template de respuesta.
{% for play in object_list %}
<div class="row">
<div class="col-sm-2">
<a href="#">
<img src="{% static play.picture.url %}" class="img-thumbnail img-responsive"/>
</a>
</div>
<div class="col-sm-10">
<p>
<a href="{% url 'underTheaterApp:playtheater_detail' pk=play.pk %}" name={{ play.pk }}>{{ play.play_name }}</a>
</p>
<p>
{{ play.synopsis }}
</p>
</div>
</div>
{% empty %}
<div class="alert alert-danger">
<strong>No</strong> se encontraron resultados para tu busqueda.
</div>
{% endfor %}
En la linea del for es donde se lee los resultados de la busqueda
{% for play in object_list %} // object_list es el parametro de context que seteamos en el SearchView
En caso de que no tengas resultados la aplicación te muestra una alerta avisando que no hay resultados para la búsqueda.
Cuarto paso
Suponiendo que la búsqueda devolvio resultados, el usuario puede tocar el nombre de la obra y entra a los detalles de la obra. En este punto se comunicaría con la vista PlayTheaterDetailView, que muestra los detalles de la obra. Solo le tenes que indicar que modelo es queres mostrar. Aclaracion: como no declaraste el template que te va a redirigir, django toma como default que el template debe estar en templates/underTheaterApp/playtheater_detail.html
(rutaDondeEstanLosTemplates/NombreDeLaApp/NombreDeLaClase_detail.html)
class PlayTheaterDetailView(DetailView):
model = PlayTheater
Extras
Cree el modelo de las obras, del teatro, de las salas y del contacto de teatro. Tambien precargue datos a la aplicacion para que se puedan hacer pedidos de busqueda. Por ultimo hice test de vista y integre "travis" al proyecto Sin los extras la prueba de concepto no tenia sentido