Explorando Generic Views do Django

Explicações

Como já diz o título do post, aos poucos estou explorando as inúmeras facilidades que o Django oferece. Realmente esta é uma ferramenta fantástica! Ou melhor, um framework fantástico. Se você trabalha com web, procure conhecê-lo.

Django Framework

Minha idéia inicial, seria estar escrevendo de forma simples, como começar a utilizar o Django, para aqueles que já ouviram falar nele ou estão a procura de um amigão que faça o trabalho duro de um website pra você. Ainda não consegui escrever nada neste sentido e simplesmente não sei por quê. Diria que é falta de tempo, mas como ele é tão rápido e simples, não posso dar esta desculpa :) .

Mesmo assim, sem mais delongas, vou falar sobre algo que aprendi recentemente e julgo ser muito útil.

Agora sim, o problema

Querendo aproveitar da praticidade das generic views, esbarrei em um (aparente) problema. Como utilizar um parâmetro passado pela url como filtro para o queryset do objeto views.generic.list_detail.object_list que é um generic view utilizado para listar objetos (registros de banco).

Para que possamos utilizar a generic view e utilizar um filtro extra sendo passado pela url, faremos o seguinte.

A solução

Vamos utilizar o nome dos usuários do sistema para listar apenas as tarefas deste mesmo usuário.

Eis um exemplo de url, que obviamente deve ser adicionada ao arquivo urls.py adequado:


(‘r^lists/(?P\w+)/$’, ‘myproject.myapp.views.user_lists’),

Agora editaremos o arquivo views.py da aplicação utilizada (myapp/views.py) com o seguinte código:

from django.views.generic.list_detail import object_list
from myproject.myapp.models import TodoList

def user_lists(request, username):
todo_lists = TodoList.objects.filter(username__exact=username)
return object_list(request, queryset=todo_lists)

Pronto! Repare que o parâmetro variável passado na url é utilizada para filtar apenas as tarefas deste usuário.

Se desejar ou for necessário você pode utilizar os outros parâmetros do objeto object_list, conforme o exemplo:

object_list(request, queryset=todo_lists,
extra_context={‘open_item_count’: open_item_count,
‘priority_items’: priority_items})

Conclusão

É simples assim, divirta-se e até a próxima!

Explore posts in the same categories: django, python

Comment:

Spam protection by WP Captcha-Free