O Django é um framework de desenvolvimento web em Python que oferece uma série de recursos poderosos para facilitar a criação de aplicações. Uma das características notáveis do Django é o Django Admin, uma interface administrativa pré-construída que permite gerenciar os modelos e os dados do aplicativo de forma rápida e fácil. Neste artigo, exploraremos como alterar os inlines (modelos secundários exibidos em uma página de administração) de acordo com uma opção selecionada no Django Admin.
O Django Admin fornece a capacidade de adicionar modelos relacionados como inlines dentro de uma página de administração. Isso é útil quando você possui relacionamentos um-para-muitos ou muitos-para-muitos em seus modelos. No entanto, há momentos em que você deseja que os inlines exibidos sejam dinamicamente alterados com base em uma opção selecionada pelo usuário.
Para alcançar esse comportamento personalizado, precisamos usar a classe ModelAdmin e suas opções. Vamos supor que temos dois modelos: ModeloPrincipal e ModeloSecundario, onde ModeloPrincipal possui uma chave estrangeira para ModeloSecundario. Queremos que, ao selecionar uma opção em ModeloPrincipal, apenas os objetos relacionados correspondentes em ModeloSecundario sejam exibidos como inlines.
python
Copy code
from django.contrib import admin
from .models import ModeloPrincipal, ModeloSecundario
class ModeloSecundarioInline(admin.TabularInline):
model = ModeloSecundario
class ModeloPrincipalAdmin(admin.ModelAdmin):
inlines = [ModeloSecundarioInline]
def get_inline_instances(self, request, obj=None):
inlines = super().get_inline_instances(request, obj)
if obj:
# Aqui você pode implementar a lógica para alterar os inlines com base em uma opção selecionada em ModeloPrincipal
if obj.opcao == ‘Opcao1’:
inlines = [ModeloSecundarioInline]
elif obj.opcao == ‘Opcao2’:
inlines = [OutroModeloSecundarioInline]
return inlines
admin.site.register(ModeloPrincipal, ModeloPrincipalAdmin)
No exemplo acima, definimos a classe ModeloSecundarioInline como uma inline tabular para o modelo ModeloSecundario. Em seguida, criamos a classe ModeloPrincipalAdmin, que herda de ModelAdmin. Nesta classe, definimos a lista inlines com o ModeloSecundarioInline como o inline padrão.
No método get_inline_instances, verificamos se o objeto ModeloPrincipal está presente. Se sim, podemos implementar a lógica para alterar os inlines com base em uma opção selecionada em ModeloPrincipal. No exemplo, verificamos a opção obj.opcao e atualizamos a lista inlines de acordo com a opção selecionada. Aqui, assumimos que opcao é um campo no modelo ModeloPrincipal que define a opção selecionada.
Por fim, registramos o ModeloPrincipal juntamente com a classe ModeloPrincipalAdmin no Django Admin usando admin.site.register(ModeloPrincipal, ModeloPrincipalAdmin).
Ao implementar essa abordagem, você poderá alterar dinamicamente os inlines exibidos com base em uma opção selecionada em um modelo principal no Django Admin. Isso proporciona uma experiência de administração mais personalizada e flexível para os usuários do seu aplicativo Django.