2010-04-18 4 views

Répondre

3

J'utilise django-jqGrid dans mon projet et je suis très satisfait des résultats:

la fonction prêt jQuery:

$(document).ready(function() { 


$.getJSON("/accounts/documents_recents_config", function(data){ 
    // On ajoute le lien vers le document 
    data['onSelectRow'] = function(id){ window.open("/fichier/lecture/"+id,"_self"); }; 
    data['gridComplete'] = function(id){ jQuery("#documents_recents_count").html(jQuery("#list_doc").jqGrid('getGridParam', 'records')); }; 
    $("#list_doc") 
     .jqGrid(data) 
     .navGrid('#pager_doc', 
      {add: true, edit: false, del: false, view: false}, 
    {}, // edit options 
    {}, // add options 
    {}, // del options 
    { multipleSearch:true, closeOnEscape:false }, // search options 
    { jqModal:false, closeOnEscape:true} // view options 
    ); 
}); 

}); 

Le code html:

<table id="list_doc"></table> 
<div id="pager_doc"></div> 

dans urls.py

(r'^documents_recents_config/$', 'document_recents_config'), 
(r'^documents_recents/', 'document_recents_handler'), 

dans views.py

@login_required 
def document_recents_handler(request): 
    # handles pagination, sorting and searching 
    if request.user and (request.user.is_staff == False): 
     grid = DocumentRecentsGrid(request) 
     return HttpResponse(grid.get_json(request), mimetype="application/json") 
    else: 
     raise Http404 

classe Mon jqGrid

class DocumentRecentsGrid(JqGrid): 
    fields = ("nom","themes", "description", "nom_du_fichier", "taille_du_fichier", "public", "cree_le") 
    queryset = None 
    url = "/accounts/documents_recents/" 
    caption = force_unicode('Mes documents personnels récents') # optional 
    colmodel_overrides = { 
     'description': { 'editable': False, 'width':240 }, 
     'nom_du_fichier': { 'editable': False, 'width':120 }, 
     'taille_du_fichier': { 'editable': False, 'width':90 }, 
     'public': { 'editable': False, 'width':50 }, 
     'cree_le': { 'editable': False, 'width':125 }, 
    } 
def __init__(self, request): 
    super(DocumentRecentsGrid, self).__init__() 
    self.queryset = Lecture.objects\ 
     .filter(salarie__username__exact=request.user.username)\ 
     .filter(consulte=False).order_by('-cree_le') 

Vous pouvez utiliser un modèle dans la classe jqGrid, il est auto-configuré!

La solution est très élégante. Afin d'afficher le format spécial (datetime, filesize et boolean), j'utilise une méthode json_encode personnalisée qui formate ces types avant d'envoyer la réponse ajax.

+0

Je ne sais pas si je dois demander ici, mais, le fichier jqgrid où se trouve la classe JqGrid doit être sur INSTALLED_APPS? J'essaye et j'obtiens une erreur d'index de liste – Cheluis

+0

Personnellement j'ai complètement intégré le dossier de jqgrid dans mon paquet d'utilité de projet avec quelques ajustements et modifications. Et comme il n'y a pas de modèles, je n'ai pas besoin de l'ajouter dans mon INSTALLED_APPS. J'importe simplement 'util.jqgrid' et je l'utilise comme vous pouvez le voir dans cet exemple. –

+0

bien .. je vais essayer encore une fois. je vous remercie beaucoup – Cheluis

Questions connexes