Django UtilidadesMarinho Brandão

Sep/06 14

Django Ajax

ajax django
Publicado há 2 years, 3 months por Marinho Brandao
O Django é realmente fantástico. Com algumas linhas de código eu criei uma funcionalidade que pode ajudar em muito quem está fazendo seus primeiros testes com Django + Ajax. este é o arquivo com o controlador:
from django.core import serializers
from django.http import HttpResponse, Http404
from django.core.exceptions import PermissionDenied
from django.db.models.query import QuerySet
from django.db import models
import operator

def generic_search(request, app_label, model_name, word):
    model = models.get_model(app_label, model_name)
    if model is None:
        raise Http404, "App %r, model %r, not found" % (app_label, model_name)
    if not request.user.has_perm(app_label + '.' + model._meta.get_change_permission()):
        raise PermissionDenied
    if not model.Ajax or not model.Ajax.search_fields:
        raise Http404, "App %r, model %r, Ajax class not found" % (app_label, model_name)
if model.Ajax.search_limit: limit = model.Ajax.search_limit else: limit = 10 or_queries = [models.Q(**{'%s__istartswith' % field_name: word}) for field_name in model.Ajax.search_fields] data = serializers.serialize("xml", model.objects.filter(reduce(operator.or_, or_queries))[:limit]) return HttpResponse(data, mimetype="text/xml")Este é um arquivo de visão. Ele recebe os parametros: aplicação, modelo e palavra-chave e retorna uma coleção de objetos serialiada para XML (isso pode ser facilmente mudado para JSON) este é o arquivo de urls:
urlpatterns = patterns('',
    # observando que esta linha deve vir antes da linha de "admin" caso ela seja utilizada por ele
    (r'^admin/([^/]+)/([^/]+)/search/([^/]*)/$', 'aCom.ajaxsearch.generic_search'),
    (r'^admin/', include('django.contrib.admin.urls')), )
Verifique que esta url é apenas uma sugestão para quem está utilizando o contrib admin como base da aplicação. Caso não o utilize, você pode remover a palavra "admin" da url e substituir conforme sua necessidade. este é o arquivo de uma classe de modelo:
class ClassificacaoCliente(models.Model):
    descricao = models.CharField(maxlength=50)

class Admin:
    pass

class Ajax:
    search_fields = ['descricao']
    search_limit = 10
note que a classe Ajax dentro da classe de modelo aponta o campo e o limite para a busca em Ajax.

Links sociais


Comentários


Escreva o seu


.net adoradores ajax android apple banco de dados blogosfera brasil django emprego família gadgets google inovação java linux lua microsoft musica opensocial opinião publicidade python rails religiao screencast seguranca software-livre tdd web windows yadsel

Artigos recentes