como enviar datos de un formulario en get_success_url

54 views
Skip to first unread message

Iago Otero

unread,
Jun 2, 2021, 2:24:41 PM6/2/21
to djan...@googlegroups.com
tengo tal que asi....lo que quiero hacer es un formulario de búsqueda..no se si se entiende la idea que quería hacer...que es mandar a la success_url los argumentos de la busqueda

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 image.png
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

francisco del roioFrancisco Del Roio

unread,
Jun 3, 2021, 7:21:14 AM6/3/21
to djan...@googlegroups.com

Hola,

Creo que te complicas mucho. Emplea django-filters para ello, y en django.contrib.postgres.search hay utilidades para búsqueda avanzada. Tampoco es necesario una solicitud POST para una búsqueda ya que no estás alterando ningún dato en tu sistema.
--
--
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.

Iago Otero

unread,
Jun 3, 2021, 9:33:53 AM6/3/21
to djan...@googlegroups.com
ok mil gracias....estoy viendo eso de django filters..no lo conocia...y si..ya vi que me estaba complicando

Iago Otero

unread,
Jun 3, 2021, 10:46:20 AM6/3/21
to djan...@googlegroups.com
he declarado el fitlerset

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 LINEAS
      
f = PYPFilter(request.GET, queryset=PYP.objects.all()) context['filter']=f
##ME DA UN FALLO EN EL REQUEST y si no el queryset


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)),
]
No 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!!

El jue, 3 jun 2021 a las 13:21, francisco del roioFrancisco Del Roio (<fran...@hotmail.com>) escribió:

Iago Otero

unread,
Jun 3, 2021, 10:51:02 AM6/3/21
to djan...@googlegroups.com
https://youtu.be/nle3u6Ww6Xk

creo que este video lo explica..lo estoy viendo aun

Iago Otero

unread,
Jun 3, 2021, 11:11:09 AM6/3/21
to djan...@googlegroups.com
can't pickle dict_items objects --->ME DA ESTE ERROR
en el video lo hace muy facil he seguido los pasoso y ni asi

Iago Otero

unread,
Jun 3, 2021, 12:29:40 PM6/3/21
to djan...@googlegroups.com
vale lo siguiente que he hecho para arreglar ese error fue hacer un CAST tal que 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 busqueda

path('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

Iago Otero

unread,
Jun 3, 2021, 12:44:17 PM6/3/21
to djan...@googlegroups.com
vale lo consegui!!!

con un simple :

{% if request.GET  %}


francisco del roioFrancisco Del Roio

unread,
Jun 3, 2021, 9:31:40 PM6/3/21
to djan...@googlegroups.com

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.

Iago Otero

unread,
Jun 4, 2021, 10:00:58 AM6/4/21
to djan...@googlegroups.com
Gracias Francisco.. Eso hice

Y Aunk no conocía el django filters.. Me fue sencillo.. A pesar del diccionario.. Que había que transformar en lista

Más una liada.. Que no me renocia el campo.. Ya que hay que indicar label=

Mil gracias por ayuda

Funciona perfecto 

Reply all
Reply to author
Forward
0 new messages