como faço para que em /admin eu possa chamar um campo de outra classe. Sem especificar primary key?
como faço para que em /admin eu possa chamar um campo de outra classe. Sem especificar primary key?
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!