Error when trying to filter data in Django?

0

The problem that shows me when trying to filter data with django I get this error:

my view is as follows:

# -*- coding: utf-8 -*-

from functools import reduce  
from django.contrib.messages.views import SuccessMessageMixin
from django.core.urlresolvers import reverse_lazy
from django.db.models import Q
from django.views.generic import CreateView, UpdateView, ListView, DeleteView
from .models import Identificador 


class RBMidentificadorListView(ListView):
    model = Identificador
    template_name = 'identificadores/lista.html'
    context_object_name = 'lista_identificador'

    def get_context_data(self, **kwargs):
        ctx = super(RBMidentificadorListView, self).get_context_data(**kwargs)
        ctx['search_url'] = 'lsitar_identificado'
        return ctx

    def get_queryset(self):
        queryset = super(RBMidentificadorListView, self).get_queryset()
        # En el admin_base.jade tenemos un input#search(name='q', type='search')
        # usamos la sig linea para obtener la consulta solicitada.
        q = self.request.GET.getlist('q')
        terms = [term for term in q]
        if q:  # Si el campo no esta vacio, construimos el filtro
            queryset = reduce(operator.or_,
                (Identificador.objects.filter(Q(clave__contains=t) \
                    | Q(nombre__contains=t)) \
                    for t in terms
                )
            )
        return queryset

urls:

# -*- coding: utf-8 -*-

from django.conf.urls import url
from .views import *

urlpatterns = [
    url(r'^new/$', RBMidentificadorView.as_view(), name='register_identificador'),
    url(r'^edit/(?P<pk>\d+)/$', RBMidentificadoresEditView.as_view(), name='editar_identificador'),
    url(r'^list/$', RBMidentificadorListView.as_view(), name='lsitar_identificador'),
    url(r'^dele/(?P<pk>\d+)/$', RBMidentificadorDeleView.as_view(), name='eliminar_identificador'),
]

html:

{% if search_url %}
    <li> <!-- solo donde se tengan registros-->
        <form action='{% url search_url %}' method="get">
            <div class="input-field">
                <input id="search" type="search" name='q'>
                <label for="search"><i class="material-icons">search</i></label>
                <i class="material-icons">close</i>
            </div>
        </form>
    </li>
{% endif %}

I hope you can help me

    
asked by wootsbot 11.04.2016 в 07:27
source

1 answer

1

You have an ID error.

Try this way:

# -*- coding: utf-8 -*-

from functools import reduce
from django.contrib.messages.views import SuccessMessageMixin
from django.core.urlresolvers import reverse_lazy
from django.db.models import Q
from django.views.generic import CreateView, UpdateView, ListView, DeleteView
from .models import Identificador


class RBMidentificadorListView(ListView):
    model = Identificador
    template_name = 'identificadores/lista.html'
    context_object_name = 'lista_identificador'


    def get_context_data(self, **kwargs):
        ctx = super(RBMidentificadorListView, self).get_context_data(**kwargs)
        ctx['search_url'] = 'lsitar_identificado'
        return ctx


    def get_queryset(self):
        queryset = super(RBMidentificadorListView, self).get_queryset()
        # En el admin_base.jade tenemos un input#search(name='q', type='search')
        # usamos la sig linea para obtener la consulta solicitada.
        q = self.request.GET.getlist('q')
        terms = [term for term in q]
        if q:  # Si el campo no esta vacio, construimos el filtro
            queryset = reduce(operator.or_,
                              (Identificador.objects.filter(Q(clave__contains=t)
                                                            | Q(nombre__contains=t))
                               for t in terms
                               )
                              )
        return queryset

If you are using SublineText use view > indentation > convert indentation to tabs sometimes the blocks are not at the same level despite being well written, it is a common error.

link

    
answered by 11.04.2016 / 09:22
source