class LISTPyP(FormView):
template_name = 'listproyectos.html'
model = PYP
form_class = S_pyp
def get_success_url(self,form):
url= reverse_lazy('search_pyp',kwargs={'s_pop':form.typ_p,
's_ofdem':form.ty,'s_cat':form.categoria,'s_donde':form.donde})
return url el formulario viene siendo esto
en la url la tengo asi
path('search_pyp/<s_pop>/<s_ofdem>/<s_cat>/<s_donde>',views.SEARCH_PYP.as_view(),name='search_pyp') me proponeis alguna idea?..o solucion?...MIL GRACIAS
Hola,
--
--
Ha recibido este mensaje porque está suscrito a Grupo "Grupo de Usuarios del Framework Django de habla hispana" de Grupos de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a djan...@googlegroups.com
Para anular la suscripción a este grupo, envíe un mensaje a django-es-...@googlegroups.com
Para obtener más opciones, visita este grupo en http://groups.google.com.bo/group/django-es.
---
Has recibido este mensaje porque estás suscrito al grupo "Django-es" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a django-es+...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/django-es/CAJ_xkVJrNo7P736R_ZA6hc%2Bg35fyiOvUv_uog3LGnQoTwzR73A%40mail.gmail.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/django-es/RO1PR80MB07000ED50B7860815FE06A70BA3C9%40RO1PR80MB0700.lamprd80.prod.outlook.com.
class PYPFilter(django_filters.FilterSet):
class Meta:
model = PYP
fields = ['typ_p','ty','categoria','donde'] en la template puesto esto<form method="get"> {{ filter.form.as_p }} <input type="submit" /> </form>pero tengo problema con la view..he probado ya como class based y como funcion y no ha funcionado en la web del modulo django filters poner tal que asi
def product_list(request): f = ProductFilter(request.GET, queryset=Product.objects.all()) return render(request, 'my_app/template.html', {'filter': f})
y yo tengo una vista basada en clase
class LISTPyP(ListView):
template_name = 'listproyectos.html'
model = PYP
def get_context_data(self, **kwargs):
context=super(LISTPyP, self).get_context_data(**kwargs)###AQUI SI AÑADO LAS LINEASf = PYPFilter(request.GET, queryset=PYP.objects.all()) context['filter']=f
##ME DA UN FALLO EN EL REQUEST y si no el querysetNo es que venga muy bien explicado en getting started de django_filters... a ver si encuentro algun video tutorial gracias de todas formas por la idea!! y la info!!
context['empof'] = PYP.objects.all().filter(ty='OFERTA').order_by('donde')
context['empdem'] = PYP.objects.all().filter(ty='DEMANDA').order_by('donde')
if Empleo.objects.all().filter(destacado=True).count() > 0:
context['EMPDD']= ETC ETC ETC que deberia hacer?? ahi en el tutorial dice de una class view, deberia usar esa vista en vez de una ListView generica????# urls.py from django.conf.urls import url from django_filters.views import FilterView from myapp.models import Product urlpatterns = [ url(r'^list/$', FilterView.as_view(model=Product)), ]
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/django-es/RO1PR80MB07000ED50B7860815FE06A70BA3C9%40RO1PR80MB0700.lamprd80.prod.outlook.com.
can't pickle dict_items objects --->ME DA ESTE ERRORen el video lo hace muy facil he seguido los pasoso y ni asi
ty = django_filters.ChoiceFilter(label='OFERTA/DEMANDA', choices=list(tipo.items())) Ahora bien, estoy perdido en lo siguiente tengo dos url, una del listado y otra del resultado de la busquedapath('search_pyp',views.SEARCH_PYP.as_view(),name='search_pyp')path('listpro',views.LISTPyP.as_view(),name='listofpro'),entonces tengo dos opciones...o cambiar los resultados en listofpro,(pagina principal de la lista)....o mandarlos a una nueva URL...de resultadoa esta es la template<h3 style="text-align: center;">BUSCADOR</h3><br>
<div style="text-align: center;">
<form action="" method="get">
{% csrf_token %}
{% for field in filter.form %}
{{ field }}
{% endfor %}
<br><br>
<input class="art-button" type="submit" value="Buscar">
</form>
</div>
</div>
</div>
</div>
</div>
<div class="art-postcontent art-postcontent-0 clearfix">
<div class="art-content-layout">
<div class="art-content-layout-row">
<div class="art-layout-cell" style="width: 50%" >
<h3 style="text-align: center;">OFERTAS</h3>
<p style="text-align: center;">TEXTO 1</p>
<table style='width: 100%'>
{% for P in empof %}
<h4>{{ P.donde }}</h4>
<tr><td>{{ P.titulo }}</td><td>{{ P.ty }} -- {{ P.categoria }}</td><td>{{ P.presupuesto_maximo }}EUR</td><td><a href="{{ P.get_absolute_url }}" style="color: black">Ver</a></td></tr>
{% endfor %}
</table>
</div>
<div class="art-layout-cell" style="width: 50%" >
<h3 style="text-align: center;">DEMANDA</h3>
<p style="text-align: center;">TEXT 1</p>
<table style='width: 100%'>
{% for P in empdem %}
<h4>{{ P.donde }}</h4>
<tr><td>{{ P.titulo }}</td><td>{{ P.ty }} -- {{ P.categoria }}</td><td>{{ P.presupuesto_maximo }}EUR</td><td><a href="{{ P.get_absolute_url }}" style="color: black">Ver</a></td></tr>
{% endfor %}
</table>
</div>
</div>
</div>
</div>
</article>
{% endblock %}COMO INDICO...si se ha hecho un busqueda en el filtro o si esta viendo la pagina por primera vez es decir simple supongo k podria poner un if-->para mostrar los resultados y un else--> si se entra por primera vez... voya echar un ojo y si resuelvo os lo comento
{% if request.GET %}
Por regla general yo intentaría reducir siempre la cantidad de código y extraer las partes en sus propios módulos/clases/funciones.
Por ejemplo para una búsqueda siempre pondría la funcionalidad en la misma pantalla del listado ya que estás aunando la funcionalidad similar en un solo lugar.
Por ejemplo, fijate que el filterset tiene una propiedad llamada
qs, donde está el queryset ya filtrado y cacheado, por lo que es
conveniente exponer la instancia del filterset y leer de dicha
propiedad directamente desde tu template.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/django-es/CAJ_xkVJ6JZASYNjusNnd_jQ6tbZyCgJ5Q91mzUsjcAzZ8U89CA%40mail.gmail.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/django-es/RO1PR80MB07008E77FF83AF0196ECA3ADBA3B9%40RO1PR80MB0700.lamprd80.prod.outlook.com.