Saiu o Django 2.1
Veja as principais novidades desta versão.
Compatibilidade com Python e Ciclo de Vida
O Django 2.1 suporta apenas Python 3.5, 3.6, e 3.7. O Django 2.0 é a última versão a suportar Python 3.4 então se quiser fazer upgrade é hora de atualizar aquelas máquinas CentOS antigas... :-)
A versão 2.0 atingiu o limite de suporte oficial: no mesmo dia foi lançada a versão 2.0.8 e esta vai ser o último release de bugfix para a versão 2.0 (ainda recebe atualizações de segurança até abril de 2019). Fique de olho no calendário:
Mudanças no Admin
Model “view” Permission
A novidade mais interessante é a nova permissão “view” para os modelos no admin: até agora era necessário alguma gambiarra tediosa pra fazer um modelo “read-only” no admin do Django.
No Django 2.1 uma nova permissão “view” será criada na próxima migration. Apesar da mudança ser compatível com instalações anteriores dando automaticamente a permissão de “view” pra quem tinha “change” é necessário prestar atenção em alguns casos:
- Se você tinha alguma permissão personalizada chamada
can_view_<modelo>
vai dar conflito de nome com a nova permissão automática (vai funcionar, mas pode dar a nova permissão de view inadvertidamente). - Se você tem um form personalizado no seu ModelAdmin, é necessário fazer override de
get_form
para retornar o formulário padrão se o usuário tiver apenas a permissão “view”:
class MyAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
if not self.has_change_permission(request, obj):
return super().get_form(request, obj, **kwargs)
return CustomForm
Outras Novidades Menores no Admin:
ModelAdmin.search_fields
agora aceita lookups comonome_startswith
ousobrenome_exact
- O jQuery do admin foi atualizado da versão 2.2.3 para 3.3.1
- Os novos métodos
ModelAdmin.delete_queryset()
eModelAdmin.get_deleted_objects()
permitem personalizar o processo de deleção da ação “Remover objetos selecionados” do Admin. - Agora dá pra fazer override de vários templates do admin tanto globalmente quanto no nível do modelo: actions.html, change_list_results.html, date_hierarchy.html, pagination.html, prepopulated_fields_js.html, search_form.html, submit_line.html, change_list_object_tools.html e change_form_object_tools.html
- Veja a lista completa de mudanças do admin no changelist oficial do release 2.1.
Via de regra ficou mais fácil escrever aplicações para automatizar fluxos de negócio usando o admin do Django.
O Que Ficou Obsoleto
- Se você ainda está usando MySQL 5.5, precisa fazer upgrade, a versão mínima do MySQL agora é a 5.6
- Se você usa o PostgreSQL 9.3, também tem que fazer upgrade, somente 9.4 em diante é suportado
- As views baseadas em funções
contrib.auth.views.login()
,logout()
,password_change()
,password_change_done()
,password_reset()
,password_reset_done()
,password_reset_confirm()
, epassword_reset_complete()
foram removidas em favor das views baseadas em classes. - O parâmetro
extra_context
da viewcontrib.auth.views.logout_then_login()
foi removido. django.test.runner.setup_databases()
foi removido.django.utils.translation.string_concat()
foi removido.- Não é mais possível silenciar Exceptions renderizando a tag
{% include %}
num template. DatabaseIntrospection.get_indexes()
foi removido.- O método
authenticate()
dos backends de autenticação precisa receber umrequest
como primeiro argumento posicional. - O
django.db.models.permalink()
foi removido. - O parâmetro
USE_ETAGS
foi removido. Os middlewaresCommonMiddleware
edjango.utils.cache.patch_response_headers()
deixaram de criar um cabeçalho ETag. - O atributo
Model._meta.has_auto_field
foi removido. - O suporte para flags dentro dos grupos de captura em grupos de captura de uma
url()
((?i)
,(?L)
,(?m)
,(?s)
, and(?u)
) foi removido. - O suporte para o método
Widget.render()
sem o argumentorenderer
foi removido.
Para beber direto na fonte, veja o anúncio e release notes originais. Tem também uma thread sobre o lançamento no Hacker News.
Um grande abraço e até a próxima!