terça-feira, 11 de janeiro de 2011

Paginando Resultados com Django Pagination

Nada de limit, top. Não iremos usar nem o slice na view e não será necessário nem criar controles para pegar a página atual, a anterior controlar parametros já enviados de busca.

Como? Django Pagination.

Basta pegar o projeto disponibilizado aqui (http://code.google.com/p/django-pagination/)  colocá-lo na raiz do seu projeto.

No arquivo settings.py poucas alterações:

  • Adicione o Pagination a tupla INSTALLED_APPS:
    • ...
      'pagination',
      ...
  • Adicione o Middleware do Pagination à tupla MIDDLEWARE_CLASSES:
    • ...
      'pagination.middleware.PaginationMiddleware',
      ...
  • E por sim no template, onde quiser paginar os resultados basta seguir a seguintes alterações:
    • Carregue o template_tags do Pagination:
      • {% load pagination_tags %}
    • Defina logo acima do "for" que correrá todos os resultados obtidos na view a seguinte linha, substituindo com as devidas informações:
      • {% autopaginate <SUA_QUERY_SET> <NRO_REGISTROS_POR_PAG> %}
    • Para os botões de contre, adicone o código a seguir:
      • {% paginate %}
Lembre-se de não filtrar os resultados na sua view, pra que o trabalho se tem algo eficiente que faz por você? 

hasta!

terça-feira, 4 de janeiro de 2011

Erro: ManagementForm data is missing or has been tampered with

Quando a versão dos templates em TEMPLATE_DIRS/admin está incompatível com a versão do django que está rodando, normalmente faltam os campos hiddens necessários para o correto funcionamento do admin.

Caso o admin esteja personalizado ou a edição estiver no front, basta colocar a linha abaixo no template para inserir os campos necessários.

{{ formset.management_form }}


hasta!

segunda-feira, 29 de novembro de 2010

Widget para many to many field interessante

Normalmente quando se faz um many to many, é gerado no admin do django um select com a opção multiple. Porém para quando este caso tem bastante registro, a usabilidade não fica das melhores. Até encontrar um item que procura na lista vai tempo.

Para resolver esse problema adicione a linha abaixo no seu Model Admin:

filter_horizontal = ('nome_do_campo_m2m',)

Desta forma este campo passará ter as mesma interface/usabilidade do esquema de permissões do módulo de usuários do django.

hasta!