Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

251
Visualizações
Django DRF get ForeignKey values in serializer

I'm trying to retrieve all Benchmarks related to a Node in my serializer, but i'm not too sure how to retrieve them. Would I need to do some sort of reverse foreignkey lookup? Maybe my models are not made correctly?

class Node(models.Model):
    node_id = models.CharField(max_length=42, unique=True)
    wallet = models.CharField(max_length=42, null=True, blank=True)
    earnings_total = models.FloatField(null=True, blank=True)
    data = models.JSONField(null=True)
    online = models.BooleanField(default=False)
    version = models.CharField(max_length=5)
    updated_at = models.DateTimeField(null=True, blank=True)
    created_at = models.DateTimeField(auto_now_add=True)


class Benchmarks(models.Model):
    benchmark_score = models.IntegerField(default=0)
    benchmarked_at = models.DateTimeField(null=True, blank=True)
    provider = models.ForeignKey(Node, on_delete=models.CASCADE)

class NodeSerializer(serializers.ModelSerializer):

    class Meta:
        model = Node
        fields = ['earnings_total', 'node_id', 'data',
                  'online', 'version', 'updated_at', 'created_at', ]
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

You can define a serializer for the Benchmarks model:

class BenchmarkSerializer(serializers.ModelSerializer):
    
    class Meta:
        model = Benchmarks
        fields = ['benchmark_score', 'benchmarked_at']

then we can use that serializer in the NodeSerializer:

class NodeSerializer(serializers.ModelSerializer):
    benchmarks_set = BenchmarkSerializer(many=True)

    class Meta:
        model = Node
        fields = ['earnings_total', 'node_id', 'data',
                  'online', 'version', 'updated_at', 'created_at', 'benchmarks_set']

Note: normally a Django model is given a singular name, so Benchmark instead of Benchmarks.

over 4 years ago · Santiago Trujillo Relatório

0

Use HyperlinkedModelSerializer like this:

class BenchmarkSerializer(serializers.HyperlinkedModelSerializer):
        
    class Meta:
        model = Benchmarks
        fields = ['benchmark_score', 'benchmarked_at']

class NodeSerializer(serializers.HyperlinkedModelSerializer):
    benchmark_set = BenchmarkSerializer(many=True, read_only=True)

    class Meta:
        model = Node
        fields = ['node_id', 'wallet', 'earnings_total', 'data', 'online',  
                  'version', 'updated_at', 'created_at', 'benchmark_set']
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda