1
resposta

models.Model

como faço para que em /admin eu possa chamar um campo de outra classe. Sem especificar primary key?

1 resposta

Olá Tânia!

Esta questão que vc colocou pode nos gerar algumas alternativas de solução de modelagem lógica e física dentro do sistema que vc está projetando.

No caso da modelagem lógica, precisamos avaliar se não estamos usando em determinados momentos as nossas "primary key" se o desenho do modelo de dados que estamos representando está 100% aderente ao que precisamos. E aí podemos avaliar se seria o caso de revisitar e ajustar a especificação do sistema pensando em direcionarmos a demanda de implementação lá na modelagem física para um BD relacional ou não relacional.

Já no caso de modelagem física, tomando como base chamar um campo de outra classe no Django Admin, sem especificar a primary key, por exemplo, vc pode utilizar a função list_display no arquivo admin.py.

Lembrando que essa função permite que você especifique quais campos deseja exibir na listagem dos objetos no admin.

E aí agora suponha que você tenha duas classes: ClasseA e ClasseB. E você queira exibir um campo da ClasseB na listagem da ClasseA. Para fazer isso, você pode adicionar o seguinte código no arquivo admin.py, por exemplo:

from django.contrib import admin
from .models import ClasseA, ClasseB

class ClasseAAdmin(admin.ModelAdmin):
    list_display = ('campo_da_classe_a', 'classe_b_campo')

    def classe_b_campo(self, obj):
        return obj.classe_b.campo # campo_da_classe_b é o campo da ClasseB que você deseja exibir

admin.site.register(ClasseA, ClasseAAdmin)

Nesse exemplo, campo_da_classe_a é um campo da ClasseA que você deseja exibir na listagem, e classe_b_campo é um método que retorna o campo desejado da ClasseB.

Dessa forma, quando você acessar a página de administração, verá o campo da ClasseA e o campo da ClasseB lado a lado na listagem.

Bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software