Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como mostrar dados de duas tabelas em comum, como se fosse um inner join por exemplo

Tenho uma dúvida, estou criando meu arquivo model.py, porém, preciso que minha api mostre dados de duas tabelas em um único serializer e me retorne esses dados em um único json de response, alguém por gentileza, poderia me ajudar?

1 resposta
solução!

Olá Douglas, tudo bem com você?

Peço desculpas pela demora no retorno.

Para mostrar dados de duas tabelas em comum em um único serializer, você pode utilizar o SerializerMethodField do Django Rest Framework. Com ele, você pode criar um método que retorna os dados das duas tabelas em um único dicionário.

Por exemplo, suponha que você tenha as tabelas Clientes e Pedidos, e queira mostrar o nome do cliente e o número do pedido em um único serializer. Você pode criar um método no serializer que retorne um dicionário com esses dados:

from rest_framework import serializers
from .models import Cliente, Pedido

class ClientePedidoSerializer(serializers.Serializer):
    nome_cliente = serializers.CharField(source='cliente.nome')
    numero_pedido = serializers.CharField(source='numero')
    cliente_pedido = serializers.SerializerMethodField()

    def get_cliente_pedido(self, obj):
        return {'nome_cliente': obj.cliente.nome, 'numero_pedido': obj.numero}

Neste exemplo acima, adicionamos o campo cliente_pedido como um SerializerMethodField. Dessa forma, ao serializar um objeto, o método get_cliente_pedido será chamado para obter os dados de ambas as tabelas e retorná-los em um único dicionário.

Todavia, vale ressaltar que como é um assunto externo ao curso e que não tenho acesso ao cenário completo do projeto incluindo a estrutura inicial do seu banco de dados, outros testes terão de ser feitos a fim de obter o resultado esperado, mas espero que esta resposta seja um bom ponto de partida para a resolução do desafio apresentado.

Espero ter lhe ajudado.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. 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